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

Redis (ioredis) - इनायत से निपटने के लिए कनेक्शन त्रुटि को पकड़ने में असमर्थ

कनेक्शन त्रुटियों को error के रूप में रिपोर्ट किया जाता है क्लाइंट पर इवेंट Redis वस्तु।

डॉक्स के "ऑटो-रीकनेक्ट" अनुभाग के अनुसार, जब रेडिस से कनेक्शन खो जाता है (या, संभवतः, पहली जगह में स्थापित करने में असमर्थ) ioredis स्वचालित रूप से पुन:कनेक्ट करने का प्रयास करेगा। केवल maxRetriesPerRequest . के बाद प्रयास लंबित आदेशों को "एक त्रुटि के साथ फ़्लश किया जाएगा", यानी catch पर पहुंचें यहाँ:

  try {
    cachedItem = await redisClient.get(queryString); // This emit an error on the redis client, because it fails to connect (that's intended, to test the behaviour)
  } catch (e) {
    logger.error(e); // It never goes there, as the error isn't "thrown", but rather "emitted" and handled by redis its own way
    epsagon.setError(e);
  }

चूंकि आप पहली त्रुटि पर अपना प्रोग्राम रोकते हैं:

  client.on('error', function (e) {
    // ...
    if (e.message === 'ERR invalid password') {
      logger.error(`Fatal error occurred "${e.message}". Stopping server.`);
      throw e; // Fatal error, don't attempt to fix

...पुन:प्रयास और बाद में "एक त्रुटि के साथ फ्लशिंग" को कभी भी चलने का मौका नहीं मिलता है।

client.on('error' . में त्रुटियों पर ध्यान न दें , और आपको await redisClient.get() . से त्रुटि वापस मिलनी चाहिए ।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. बिना मूल्य के रेडिस स्टोर कुंजी

  2. phpredis MAC OSX स्थापित करें

  3. रेडिस डेटा संरचनाओं का परिचय:बिटमैप्स

  4. रेडिस वाइल्डकार्ड EVAL, SCAN, और DEL रिटर्न का उपयोग करके स्क्रिप्ट को हटाता है गैर नियतात्मक आदेशों के बाद आदेशों को लिखने की अनुमति नहीं है

  5. मैं कैसे जांचूं कि फ्लास्क शुरू करने से पहले रेडिस चल रहा है या नहीं (और अगर यह नहीं है तो इसे शुरू करें)?