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