sql >> Database >  >> NoSQL >> Redis

Zal het redis incr-commando een beperking zijn tot een specifiek aantal?

Je zou een klein Lua-script kunnen gebruiken om de increment binnen Redis zelf te doen, zodat het in wezen single-threaded is:

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

In plaats van het script in te typen, kunt u de Lua-code ook in een bestand met de naam IncWithCap.lua plaatsen. zoals dit:

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

Dan kun je het in Redis laden met:

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

Voorbeelduitvoer

"6e6ad88c9a2b7dfdade9c5763467aaab2358d4e1"

Dan kun je het aanroepen/uitvoeren met:

127.0.0.1:6379> evalsha 6e6ad88c9a2b7dfdade9c5763467aaab2358d4e1 1 CappedInt get



  1. Hoe gebruik ik mongodb met elektron?

  2. Geneste javascript-objecten opslaan in redis - NodeJS

  3. MongoDB $sampleRate

  4. veel op veel relatie met nosql (mongodb en mangoest)