sql >> Database teknologi >  >> NoSQL >> Redis

Vil redis incr-kommandoen være begrænsning til et bestemt antal?

Du kan bruge et lille Lua-script til at udføre stigningen i selve Redis, så det i det væsentlige er enkelt-trådet:

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

I stedet for at indtaste scriptet, kan du også lægge Lua-koden i en fil kaldet IncWithCap.lua sådan her:

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

Så kan du indlæse den i Redis med:

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

Eksempeloutput

"6e6ad88c9a2b7dfdade9c5763467aaab2358d4e1"

Så kan du kalde/udføre det med:

127.0.0.1:6379> evalsha 6e6ad88c9a2b7dfdade9c5763467aaab2358d4e1 1 CappedInt get



  1. MongoDB og Robomongo:Kan ikke oprette forbindelse (godkendelse)

  2. Custom Cascading i Spring Data MongoDB

  3. Mongoose:hvad er forskellene mellem Model.create og Collection.insert

  4. Spring Data Mongo Repository::Fælles delt metode på tværs af alle Repo-spørgsmål