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

Azure Redis Cache - अनेक त्रुटियाँ TimeoutException:GET {key} का प्रदर्शन करने वाला टाइमआउट

कुछ बिंदु जिन्होंने हमारी स्थिति में सुधार किया:

बाइनरीफॉर्मेटर के बजाय प्रोटोबफ-नेट

मैं प्रोटोबफ-नेट का उपयोग करने की सलाह देता हूं क्योंकि यह उन मानों के आकार को कम कर देगा जिन्हें आप अपने कैश में संग्रहीत करना चाहते हैं।

public interface ICacheDataSerializer
    {
        byte[] Serialize(object o);
        T Deserialize<T>(byte[] stream);
    }

public class ProtobufNetSerializer : ICacheDataSerializer
    {
        public byte[] Serialize(object o)
        {
            using (var memoryStream = new MemoryStream())
            {
                Serializer.Serialize(memoryStream, o);

                return memoryStream.ToArray();
            }
        }

        public T Deserialize<T>(byte[] stream)
        {
            var memoryStream = new MemoryStream(stream);

            return Serializer.Deserialize<T>(memoryStream);
        }
    }

पुन:प्रयास की रणनीति लागू करें

टाइमआउट मुद्दों को संभालने के लिए इस RedisCacheTransientErrorDetectionStrategy को लागू करें।

using Microsoft.Practices.TransientFaultHandling;

public class RedisCacheTransientErrorDetectionStrategy : ITransientErrorDetectionStrategy
    {
        /// <summary>
        /// Custom Redis Transient Error Detenction Strategy must have been implemented to satisfy Redis exceptions.
        /// </summary>
        /// <param name="ex"></param>
        /// <returns></returns>
        public bool IsTransient(Exception ex)
        {
            if (ex == null) return false;

            if (ex is TimeoutException) return true;

            if (ex is RedisServerException) return true;

            if (ex is RedisException) return true;

            if (ex.InnerException != null)
            {
                return IsTransient(ex.InnerException);
            }

            return false;
        }
    }

इस तरह त्वरित करें:

private readonly RetryPolicy _retryPolicy;

// CODE
var retryStrategy = new FixedInterval(3, TimeSpan.FromSeconds(2));
            _retryPolicy = new RetryPolicy<RedisCacheTransientErrorDetectionStrategy>(retryStrategy);

इस तरह प्रयोग करें:

var cachedString = _retryPolicy.ExecuteAction(() => dataCache.StringGet(fullCacheKey));

अपना कोड देखें कैश कॉल और मूल्यों को कम करने के लिए जिन्हें आप अपने कैश में संग्रहीत कर रहे हैं। मैंने मूल्यों को अधिक कुशलता से संग्रहीत करके बहुत सी त्रुटियों को कम किया।

अगर इनमें से कोई भी मदद नहीं करता है। उच्चतर कैश में ले जाएँ (हमने C1 के बजाय C3 का उपयोग करना समाप्त कर दिया)।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रेडिस लुआ स्क्रिप्ट बनाम सिंगल कॉल

  2. मैं अपने सरल एक्सप्रेस ऐप के साथ Node.js क्लस्टर का उपयोग कैसे करूं?

  3. मैं वेबमाचिन और इरेडिस को एक साथ कैसे काम कर सकता हूं?

  4. क्या REDIS में स्कैन/HSCAN कमांड के लिए COUNT का कोई अनुशंसित मान है?

  5. एप्लिकेशन कैश बनाम। दूसरे स्तर के कैश को हाइबरनेट करें, जिसका उपयोग करना है?