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

क्या रेडिस में अन्य लुआ लिपियों में परिभाषित लुआ कार्यों को कॉल करना संभव है?

मैं स्वीकृत उत्तर के विपरीत होने जा रहा हूं, क्योंकि स्वीकृत उत्तर गलत है।

जबकि आप नामित कार्यों को स्पष्ट रूप से परिभाषित नहीं कर सकते हैं, आप कर सकते हैं किसी भी स्क्रिप्ट को कॉल करें जिसे आप EVALSHA के साथ कॉल कर सकते हैं . अधिक विशेष रूप से, सभी Lua स्क्रिप्ट जिन्हें आपने SCRIPT LOAD के माध्यम से स्पष्ट रूप से परिभाषित किया है या परोक्ष रूप से EVAL . के माध्यम से वैश्विक लुआ नेमस्पेस में f_<sha1 hash> . पर उपलब्ध हैं (जब तक/जब तक आप SCRIPT FLUSH . पर कॉल नहीं करते ), जिसे आप किसी भी समय कॉल कर सकते हैं।

जिस समस्या का आप सामना करते हैं वह यह है कि फ़ंक्शन को बिना तर्क के परिभाषित किया जाता है, और KEYS और ARGV टेबल वास्तव में ग्लोबल्स हैं। इसलिए यदि आप लुआ लिपियों के बीच संवाद करने में सक्षम होना चाहते हैं, तो आपको या तो अपने KEYS को प्रबंधित करना होगा और ARGV टेबल, या आपको अपने कार्यों के बीच संचार के लिए मानक रेडिस कीस्पेस का उपयोग करने की आवश्यकता है।

127.0.0.1:6379> script load "return {KEYS[1], ARGV[1]}"
"d006f1a90249474274c76f5be725b8f5804a346b"
127.0.0.1:6379> eval "return f_d006f1a90249474274c76f5be725b8f5804a346b()" 1 "hello" "world"
1) "hello"
2) "world"
127.0.0.1:6379> eval "KEYS[1] = 'blah!'; return f_d006f1a90249474274c76f5be725b8f5804a346b()" 1 "hello" "world"
1) "blah!"
2) "world"
127.0.0.1:6379>

यह सब कहा गया है, यह कल्पना का पूर्ण उल्लंघन है, और यदि आप इसे रेडिस क्लस्टर परिदृश्य में चलाने का प्रयास करते हैं तो अजीब तरीके से काम करना बंद करना पूरी तरह से संभव है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मैसकल, रेडिस और मोंगो में एक वितरित लेनदेन को कैसे कार्यान्वित करें

  2. मिलान पैटर्न के साथ ioredis कुंजी

  3. एक रेडिस लुआ स्क्रिप्ट के साथ एकाधिक डीबी का प्रयोग करें?

  4. StackExchange.Redis:एकाधिक हैश के लिए बैच एक्सेस

  5. आप टोरनेडो से रेडिस को * ठीक से * क्वेरी कैसे करते हैं?