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

शीर्ष स्तर को कम करने के लिए रेडिस में संरचना में सूची कैसे घोंसला करें?

ज्यादातर मामलों में, SADD या ZADD पाइपलाइनिंग कमांड के साथ बेहतर होगा। एक बहु/EXEC लेनदेन का उपयोग करें यदि जोखिम है तो किसी अन्य ग्राहक को बीच में कुंजी मिल सकती है, इसलिए एक अपूर्ण वस्तु प्राप्त हो रही है।

हैश-फ़ील्ड में सूची को स्ट्रिंग करना कुछ मामलों में उचित हो सकता है।

'जल्दी से चाबियों को बेदखल' करने के संबंध में, UNLINK . का उपयोग करना सुनिश्चित करें DEL . के बजाय ।

यदि आप स्ट्रिंग करना चुनते हैं, तो लुआ और लुआ सीजेएसओएन लाइब्रेरी का उपयोग करके हैश फ़ील्ड में जेएसओएन-एन्कोडेड सरणी में परमाणु रूप से सम्मिलित करने और निकालने का समर्थन कैसे करें:

सम्मिलित करें :

local items = cjson.decode(redis.call('HGET', KEYS[1], 'items'))
table.insert(items, ARGV[1])
return redis.call('HSET', KEYS[1], 'items', cjson.encode(items))

मान के आधार पर निकालें :

local items = cjson.decode(redis.call('HGET', KEYS[1], 'items'))
local pos = -1;
for i, v in ipairs(items) do
    if ARGV[1] == v then
        pos = i
        break
    end
end
if pos == -1 then
    return -1
else
    table.remove(items, pos)
    return redis.call('HSET', KEYS[1], 'items', cjson.encode(items))
end

उपयोग उदाहरण :

> HGETALL meta_key
1) "user"
2) "12345"
3) "tag"
4) "D12321341234123"
5) "items"
6) "{}"
> EVAL "local items = cjson.decode(redis.call('HGET', KEYS[1], 'items')) \n table.insert(items, ARGV[1]) \n return redis.call('HSET', KEYS[1], 'items', cjson.encode(items))" 1 meta_key value1
(integer) 0
> HGETALL meta_key
1) "user"
2) "12345"
3) "tag"
4) "D12321341234123"
5) "items"
6) "[\"value1\"]"
> EVAL "local items = cjson.decode(redis.call('HGET', KEYS[1], 'items')) \n table.insert(items, ARGV[1]) \n return redis.call('HSET', KEYS[1], 'items', cjson.encode(items))" 1 meta_key value2
(integer) 0
> HGETALL meta_key
1) "user"
2) "12345"
3) "tag"
4) "D12321341234123"
5) "items"
6) "[\"value1\",\"value2\"]"
> EVAL "local items = cjson.decode(redis.call('HGET', KEYS[1], 'items')) \n local pos = -1; \n for i, v in ipairs(items) do \n     if ARGV[1] == v then \n     pos = i \n     break \n end \n end \n if pos == -1 then \n     return -1 \n else \n     table.remove(items, pos) \n return redis.call('HSET', KEYS[1], 'items', cjson.encode(items)) \n end" 1 meta_key value1
(integer) 0
> HGETALL meta_key
1) "user"
2) "12345"
3) "tag"
4) "D12321341234123"
5) "items"
6) "[\"value2\"]"
> EVAL "local items = cjson.decode(redis.call('HGET', KEYS[1], 'items')) \n local pos = -1; \n for i, v in ipairs(items) do \n     if ARGV[1] == v then \n     pos = i \n     break \n end \n end \n if pos == -1 then \n     return -1 \n else \n     table.remove(items, pos) \n return redis.call('HSET', KEYS[1], 'items', cjson.encode(items)) \n end" 1 meta_key value3
(integer) -1
> HGETALL meta_key
1) "user"
2) "12345"
3) "tag"
4) "D12321341234123"
5) "items"
6) "[\"value2\"]"


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रेडिस हाइबरनेट दूसरे स्तर के कैश के रूप में

  2. Redis और Node.js और Socket.io प्रश्न

  3. डॉकर कंटेनर में डॉकर-कंपोज़ डाउन और अप के बीच रेडिस डेटा को जीवित रखें

  4. रेडिस, पबसुब की घटनाओं को सुनना और उन्हें अधिक विश्वसनीय उपभोग के लिए एक स्ट्रीम में बदलना

  5. redis.conf को कैसे सेव और एग्जिट करें?