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

क्या redis incr कमांड विशिष्ट संख्या तक सीमित हो सकती है?

आप रेडिस के भीतर वृद्धि करने के लिए थोड़ी लुआ स्क्रिप्ट का उपयोग कर सकते हैं ताकि यह अनिवार्य रूप से सिंगल-थ्रेडेड हो:

127.0.0.1:6379> set CappedInt 7
OK
127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
(integer) 8
127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
(integer) 9
127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
(integer) 10
127.0.0.1:6379> eval "local c=redis.call(ARGV[1],KEYS[1])+0;if c<10 then return redis.call('INCR',KEYS[1]); else return 10; end" 1 CappedInt get
(integer) 10

स्क्रिप्ट में टाइप करने के बजाय, आप Lua कोड को IncWithCap.lua नामक फ़ाइल में भी डाल सकते हैं। इस तरह:

local cap=10
if(redis.call(ARGV[1],KEYS[1])+0 < cap) then
   return redis.call('INCR',KEYS[1])
end
return cap

फिर आप इसे रेडिस में लोड कर सकते हैं:

redis-cli SCRIPT LOAD "$(cat IncWithCap.lua)"

नमूना आउटपुट

"6e6ad88c9a2b7dfdade9c5763467aaab2358d4e1"

फिर आप इसे कॉल/निष्पादित कर सकते हैं:

127.0.0.1:6379> evalsha 6e6ad88c9a2b7dfdade9c5763467aaab2358d4e1 1 CappedInt get



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मैं पाइथन से रेडिस को अनंतता कैसे पास कर सकता हूं?

  2. बिना मूल्य के रेडिस स्टोर कुंजी

  3. redis.conf में tcp-backlog क्या है?

  4. NodeJS + ExpressJS + RedisStore सत्र अपरिभाषित है

  5. रेडिस स्टोर (या कोई डेटाबेस?) लॉक मैकेनिज्म (NodeJS)