मैं क्लाइंट के रूप में RedisOnGo + node_redis पर नोडजेएस + एक्सप्रेस + रेडिस का उपयोग कर रहा हूं। मैं बहुत सारी सहमति की उम्मीद करता हूं, इसलिए वॉच का परीक्षण करने की कोशिश कर रहा हूं। इस उदाहरण में एक्सप्रेस, केवल आवश्यक सामान नहीं होंगे।एक ग्राहक द्वारा रेडिस वॉच मल्टी एक्सेक
var redis = require("redis")
var rc = redis.createClient(config.redis.port, config.redis.host)
rc.auth(config.redis.hash, function(err) {
if (err) {
throw err
}
})
rc.on('ready', function() {
rc.set("inc",0)
for(var i=1;i<=10;i++){
rc.watch("inc")
rc.get("inc",function(err,data){
var multi = rc.multi()
data++ // I do know I can use rc.incr(), this is just for example
multi.set("inc",data)
multi.exec(function(err,replies){
console.log(replies)
})
})
}
})
उम्मीद परिणाम: कार्यकारी कॉलबैक में एन त्रुटियों हो रही है और अंत में हो रही "इंक" चर = 10-एन।
अप्रत्याशित परिणाम: कार्यकारी कॉलबैक में 0 त्रुटियों हो रही लेकिन अंत में हो रही "इंक" चर = 1.
घड़ी मेरी कोड के साथ काम नहीं करता।
मुझे यह धागा redis and watch + multi allows concurrent users मिला है। वे कहते हैं कि यह केवल रेडिस क्लाइंट की वजह से है।
तब मुझे यह धागा Should I create a new Redis client for each connection? मिला। वे कहते हैं कि प्रत्येक लेनदेन के लिए एक नया ग्राहक उत्पन्न करना "निश्चित रूप से अनुशंसित नहीं है"। मै खो गया हूँ।
कृपया यह भी ध्यान दें कि मुझे Redis सर्वर को प्रमाणित करना है। अग्रिम में धन्यवाद!
संस्करण 1:
मैं हर घड़ी बहु-EXEC यात्रा से पहले एक नए ग्राहक संबंध बनाने के द्वारा यह स्थानीय Redis उदाहरण का उपयोग करते हुए (तो मैं client.auth उपयोग न करें) काम करने के लिए सक्षम था। यह सुनिश्चित नहीं है कि यह अच्छा है, लेकिन परिणाम अब 100% सटीक हैं।
संस्करण 2 यह काम करता है, तो मैं हर घड़ी बहु-EXEC यात्रा से पहले एक नए ग्राहक संबंध बनाने और उसके बाद client.auth करते हैं और client.on के लिए प्रतीक्षा किए गए।
प्रश्न अभी भी मौजूद है, क्या यह ठीक है कि मैं प्रत्येक पुनरावृत्ति के लिए नए क्लाइंट कनेक्शन बना सकता हूं?
धन्यवाद, आपका जवाब काफी व्याख्यात्मक हो रहा है और आप मेरे सवाल का सही समझ लिया है। यदि 2 दिनों में कोई और जवाब नहीं है, तो बक्षीस तुम्हारा है। – igorpavlov