2015-06-17 3 views
13

बनाने के लिए मेरे पास एज़ूर रेडिस कैश से कनेक्ट करने के लिए कोड का निम्न भाग है।रेडिस सर्वर से कनेक्ट करना संभव नहीं था; एक डिस्कनेक्टेड मल्टीप्लेक्सर

public class CacheConnectionHelper 
    { 
     private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() => 
     { 
      return ConnectionMultiplexer.Connect(SettingsHelper.AzureRedisCache); 
     }); 

     public static ConnectionMultiplexer Connection 
     { 
      get 
      { 
       return lazyConnection.Value; 
      } 
     } 
    } 

और मैं इसे इस तरह का उपयोग प्रतिदिन

public static List<Models.Module> GetModules() 
     { 
      IDatabase cache = CacheConnectionHelper.Connection.GetDatabase(); 
      List<Models.Module> listOfModules = new List<Models.Module>(); 
      listOfModules = (List<Models.Module>)cache.Get("ApplicationModules"); 
      if (listOfModules == null) 
      { 
       listOfModules = dbApp.Modulos.ToList(); 
       cache.Set("ApplicationModules", listOfModules, TimeSpan.FromMinutes(SettingsHelper.CacheModuleNames)); 
       return listOfModules; 
      } 
      else { 
       return listOfModules; 
      } 
     } 

हालांकि 1 या 2 बार मैं इस अपवाद:

Additional information: It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail. UnableToResolvePhysicalConnection on PING 

सवाल यह है कि मैं इस कोड refactor जाना कर सकते हैं कैश कनेक्शन विफल होने पर डेटाबेस में?

उत्तर

27

आपको जो त्रुटि मिल रही है वह आमतौर पर एक संकेत है कि आपने abortConnect = false को अपने कनेक्शन स्ट्रिंग में सेट नहीं किया है। abortConnectसच है, जो इसे बनाता है ताकि StackExchange.Redis कुछ शर्तों के तहत सर्वर से स्वचालित रूप से पुन: कनेक्ट नहीं होगा। हम दृढ़ता से अनुशंसा करते हैं कि आप अपने कनेक्शन स्ट्रिंग में abortConnect = false सेट है कि इतना है कि SE.Redis पृष्ठभूमि में ऑटो पुन: कनेक्ट होगा अगर एक नेटवर्क ब्लिप होता है।

2

आपको अपने त्रुटि संदेश के अंतिम भाग पर भी ध्यान देना चाहिए, क्योंकि यह कनेक्शन विफल होने के कारण के बारे में बहुत उपयोगी विवरण प्रदान करता है।

आपके मामले में:

यह redis सर्वर (रों) से कनेक्ट करने के लिए संभव नहीं था; एक डिस्कनेक्टेड मल्टीप्लेक्सर बनाने के लिए, AbortOnConnectFail अक्षम करें। PING पर UnableToResolvePhysicalConnection

मेरे मामले:

यह redis सर्वर (रों) से कनेक्ट करने के लिए संभव नहीं था; एक डिस्कनेक्टेड मल्टीप्लेक्सर बनाने के लिए, AbortOnConnectFail अक्षम करें। समय समाप्त

3

शुरुआती एक चेहरा इस समस्या के अन्य कोड में जो गोता के लिए:

if (RedisConn == null) 
     { 
      ConfigurationOptions option = new ConfigurationOptions 
      { 
       AbortOnConnectFail = false, 
       EndPoints = { redisEndpoint } 
      }; 
      RedisConn = ConnectionMultiplexer.Connect(option); 
     } 
+0

बिल्कुल सही देख सकते हैं ... लेकिन असफलता क्या है? यदि यह पहले नेटवर्क ब्लिप पर विफल रहता है तो हम इसे फिर से प्रयास करने के साथ ठीक हैं लेकिन अनिश्चित काल तक नहीं। क्या अतिरिक्त विकल्प हैं? Google ने मुझे यहां बताया। – Glenn

+0

इसे मिला, यह कनेक्टरीट्री का कॉन्फ़िगरेशनऑप्शन है जो रीट्रीज़ की संख्या पर सेट है। सुनिश्चित नहीं है कि डिफ़ॉल्ट क्या सेट है। – Glenn

+0

डिफ़ॉल्ट ConnectRetry के लिए 3 - https://stackexchange.github.io/StackExchange.Redis/Configuration.html – vshale

0

यह समस्या एक नया रिलीज में हल किया गया था, संस्करण 1.2.6 - आप में enter link description here

संबंधित मुद्दे