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

सर्विसस्टैक रेडिस, लुआ तालिका को सूची के रूप में कैसे वापस करें

लुआ से, आपको एक लुआ ऐरे, या एक JSON ऑब्जेक्ट वापस करने की आवश्यकता है। 'माईटेबल' एक हैंडल की तरह लगता है जो केवल लुआ दुभाषिया के अंदर मान्य है। कॉल के तुरंत बाद उस हैंडल को साफ कर दिया जाता है, इसलिए क्लाइंट को प्रचारित नहीं किया जाएगा।

संपादित करें:एक साधारण लुआ टेबल/ऐरे का समर्थन किया जाना चाहिए। स्क्रिप्ट को देखे बिना निश्चित नहीं है कि क्या हो रहा है।

लुआ लिपियों की परमाणुता के बारे में कुछ अतिरिक्त जानकारी के लिए यह SO लिंक भी देखें।

आशा है कि यह मदद करता है, TW

ओपी संपादित करने के बाद:

यह ओपी की मूल लुआ लिपि थी:

local a={}
for i = 1, 1, 1 do
  a["47700415"] = redis.call('hget', 'asr:47700415', 'MDEngines')
  a["47700415_000"] = redis.call('hget', 'asr:47700415_000', 'MGEngines')
end
return a

उत्तर: आप लुआ रिटर्न वैल्यू में नेस्टेड मान वापस नहीं कर सकते हैं। जैसा कि आप अपने सर्विसस्टैक फ़ंक्शन से देख सकते हैं, लुआ स्क्रिप्ट एक सूची लौटाती है, और एक सूची नेस्टेड नहीं होती है।

यहां दो समाधान दिए गए हैं, एक JSON वाला थोड़ा ओवरहेड देता है (लेकिन प्रोग्रामिंग करते समय आसान हो सकता है, और शून्य-सुरक्षित है)।

a:cjson का उपयोग करना

local a={}
for i = 1, 1, 1 do
  a["47700415"] = redis.call('hget', 'asr:47700415', 'MDEngines')
  a["47700415_000"] = redis.call('hget', 'asr:47700415_000', 'MGEngines')
end
return cjson.encode(a)

MsgPack भी एक बहुत अच्छा और कॉम्पैक्ट क्रमांकन प्रारूप है (हम इसका बहुत उपयोग करते हैं), और इसे इस तरह वापस किया जा सकता है:

a-alt:cmsgpack का उपयोग करना

return cmsgpack.pack(a)

b:एक साधारण सरणी का उपयोग करना

local a={}
for i = 1, 1, 1 do
  a[1] = "47700415"
  a[2] = redis.call('hget', 'asr:47700415', 'MDEngines')
  a[3] = "47700415_000"
  a[4] = redis.call('hget', 'asr:47700415_000', 'MGEngines')
end
return a

यह लौटाता है:

:

[email protected]:~$ redis-cli -p 14312 EVAL "$(cat ~/tw_luatest.lua)" 0 0
"{\"47700415\":\"Hello\",\"47700415_000\":\"World\"}"

:

[email protected]:~$ redis-cli -p 14312 EVAL "$(cat ~/tw_luatest2.lua)" 0 0
1) "47700415"
2) "Hello"
3) "47700415_000"
4) "World"

जैसा कि आप देख सकते हैं, मैंने कुछ डमी डेटा HSET . में डाला है ।

मैं इस लिंक की भी सिफारिश कर सकता हूं, वहां कुछ अच्छी जानकारी:इंट्रो-टू-लुआ-फॉर-रेडिस-प्रोग्रामर

Lua dict में मान जोड़ने का एक अच्छा तरीका यहां देखा जा सकता है:

local fkeys = redis.call('sinter', unpack(KEYS))
local r = {}
for i, key in ipairs(fkeys) do
  r[#r+1] = redis.call('hgetall',key)
end
return r



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. स्प्रिंग डेटा के साथ जेडिस का उपयोग करते समय रेडिस में अजीब कुंजी के साथ डेटा क्यों संग्रहीत किया जा रहा है?

  2. रेडिस लीडरबोर्ड के लिए अद्वितीय स्कोरिंग

  3. Node.js, Socket.io, Redis पब/उप उच्च मात्रा, कम विलंबता कठिनाइयाँ

  4. RDBTools को RedisLabs द्वारा अधिग्रहित कर लिया गया है!

  5. एक यूआरएल के तहत मैराथन (मेसोस) में रेडिस चलाएं