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

Nodejs, निष्पादन जारी रखने से पहले Redis क्वेरी के पूरा होने की प्रतीक्षा नहीं कर रहा है

आप कहते हैं कि फ़ाइल 2/3 "समान सामग्री" हैं लेकिन वे एक महत्वपूर्ण क्षेत्र में नहीं हैं। promisifyAll . के लिए ब्लूबर्ड के दस्तावेज़ के अनुसार (देखें http://bluebirdjs.com/docs/api/promise.promisifyall.html), यह सुविधा एक ...Async बनाती है रेडिस क्लाइंट में प्रत्येक कोर फ़ंक्शन का संस्करण। आप hmgetAsync . पर कॉल करें आपके पहले मामले में, लेकिन आप केवल hmget . पर कॉल करते हैं अपने दूसरों में।

यह महत्वपूर्ण है क्योंकि आप एक एसिंक पैटर्न का उपयोग कर रहे हैं लेकिन एक गैर-एसिंक कोड संरचना के साथ। File2/3 में आप result1 . सेट करते हैं async कॉलबैक के अंदर, लेकिन फिर कॉल के वापस आने से पहले इसे प्रत्येक कॉल के नीचे वापस कर दें।

आपके पास दो विकल्प हैं:

1:आप redis क्लाइंट के अलावा कॉलबैक में पास करके file2/3/etc को पूरी तरह से पारंपरिक पैटर्न में बदल सकते हैं:

module.exports = function(redisclient, callback){

result1 returning लौटाने के बजाय , तो आप इस मान के साथ कॉलबैक को कॉल करेंगे:

if(redisValue == 'test value'){
    callback(null, "success");
} else {
    callback("failed", null);
}

2:आप file2/3/..N को प्रॉमिस-बेस्ड में कनवर्ट कर सकते हैं, इस मामले में आपको promisifyAll(require(...)) की जरूरत नहीं है। उन्हें - आप बस require() . कर सकते हैं उन्हें। ऐसा पैटर्न कुछ इस तरह दिख सकता है:

module.exports = function(redisclient){
    return redisclient.hmgetAsync("testdata", "text1");
};

यह एक बहुत ही सरल और साफ-सुथरा विकल्प है, और यदि आप इसके साथ चलते रहते हैं तो आप देख सकते हैं कि आप शायद आवश्यकता () को भी समाप्त कर सकते हैं और बस hmgetAsync करें। फ़ाइल 1 में कैसंड्रा द्वारा लौटाए गए उपयुक्त डेटा के साथ। लेकिन आपकी विशिष्ट एप्लिकेशन आवश्यकताओं को देखे बिना यह जानना कठिन है। किसी भी घटना में, वादा-आधारित पैटर्न आम तौर पर बहुत छोटे और साफ-सुथरे होते हैं, लेकिन हमेशा बेहतर नहीं होते - उनका उपयोग करने के लिए एक मध्यम प्रदर्शन ओवरहेड होता है। यह आपकी कॉल है कि आप किस तरफ जाते हैं - या तो काम करेगा।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. phpredis पुस्तकालय का उपयोग कर PHP के लिए Elasticache में Redis क्लस्टर कनेक्ट नहीं कर सकता

  2. प्रेस विज्ञप्ति:स्केलग्रिड ने एडब्ल्यूएस पर रेडिस ™ के लिए होस्टिंग सेवा की घोषणा की

  3. रेडिस क्लाइंट

  4. रेडिस अधिकतम खुली फ़ाइल क्यों सेट नहीं कर सकता

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