आपको RedisClient
. का कोई सिंगलटन इंस्टेंस नहीं रखना चाहिए या IRedisTypedClient<BarSet>
जो दोनों एक गैर-थ्रेड-सुरक्षित रेडिस टीसीपी कनेक्शन को इनकैप्सुलेट करता है। इसके बजाय आप IRedisClientsManager
. के सिंगलटन इंस्टेंसेस को होल्ड कर सकते हैं - जिसका उद्देश्य थ्रेड-सुरक्षित रेडिस क्लाइंट फैक्ट्री (जैसे डीबी कनेक्शन पूल) प्रदान करना है।
यदि आप सर्विसस्टैक सेवाओं का भी उपयोग कर रहे हैं, तो सर्विसस्टैक के आईओसी में निर्भरताओं को पंजीकृत करना आसान है, इसलिए IRedisClientsManager
किसी भी अन्य निर्भरता की तरह इंजेक्ट किया जा सकता है, उदाहरण के लिए AppHost.Configure()
. में :
container.Register<IRedisClientsManager>(c =>
new BasicRedisClientManager("[email protected]:6379"));
यह आपको base.Redis
. का उपयोग करने की अनुमति देगा आपकी सर्विसस्टैक सेवाओं में RedisClient प्रॉपर्टी, उदा:
public class JmaSetsService : Service
{
public object Get(JmaSets request)
{
var redisBarSets = base.Redis.As<BarSet>();
return redisBarSets.Lists[instument_key].GetAll();
}
}
अगर आप base.Redis
. का इस्तेमाल करते हैं आपको RedisClient का स्पष्ट रूप से निपटान करने की आवश्यकता नहीं है क्योंकि यह पहले से ही सेवा द्वारा स्वचालित रूप से निपटाया जा चुका है, अर्थात:
public class Service
{
...
public virtual void Dispose()
{
if (redis != null)
redis.Dispose();
...
}
}
आप IRedisClientsManager
को भी इंजेक्ट कर सकते हैं सार्वजनिक संपत्ति या कंस्ट्रक्टर तर्क का उपयोग करके किसी भी अन्य निर्भरता की तरह अपने स्वयं के वर्गों में, जैसे:
public class RedisBarSetData
{
public virtual IRedisClientsManager RedisManager { get; set; }
private IRedisClient redis;
public virtual IRedisClient Redis
{
get { return redis ?? (redis = RedisManager.GetClient()); }
}
public override void Dispose()
{
if (redis != null)
redis.Dispose();
}
public List<BarSet> getData(BarSets data)
{
setKeys(data); // instrument_key is set in here
return Redis.As<BarSet>().Lists[instrument_key].GetAll();
}
}
जिसके बाद आप सर्विसस्टैक के आईओसी में रजिस्टर और ऑटोवायर कर सकते हैं:
container.RegisterAutoWired<RedisBarSetData>();
जो तब आपको इसे अपनी सेवाओं में एक निर्भरता के रूप में उपयोग करने देगा:
public class JmaSetsService : Service
{
public RedisBarSetData RedisBarSetData { get; set; }
public object Get(JmaSets request)
{
return RedisBarSetData.getData(new BarSets(request));
}
}
<ब्लॉकक्वॉट>
अपनी खुद की बेस क्लास बनाने का एक विकल्प पहले से मौजूद लॉजिकबेस बेस क्लास से इनहेरिट करना है, जिसमें पहले से ही IRedisClientsManager
है। संपत्ति और ऊपर बॉयलरप्लेट।