Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

ServiceStack.Redis परिवहन पढ़ने में असमर्थ - BasicRedisClientManager

आपको 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 है। संपत्ति और ऊपर बॉयलरप्लेट।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रेडिस स्लेव पर इंफो कमांड द्वारा सूचीबद्ध एक्सपायरी कीज़ की संख्या जो मैं देखता हूं उसके अनुरूप नहीं है

  2. रेडिस के साथ दूसरे स्तर के कैश को हाइबरनेट करें-क्या यह प्रदर्शन में सुधार करेगा?

  3. सिनॉन का उपयोग करके जावास्क्रिप्ट में रेडिस इंटरैक्शन को रोकना

  4. रेडिस को कैसे पता चलेगा कि उसे कैश्ड डेटा या डीबी से ताजा डेटा वापस करना है?

  5. Microsoft.Extensions.Cashing.Redis और Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache के बीच अंतर