sql >> Databasteknik >  >> NoSQL >> Redis

Redis INCRBY med limits

Det här svaret kanske inte är vad du förväntar dig. Men jag måste säga att Lua-skript är den kristallklara lösningen.

-- range-incrby.lua key , increment
local key = KEYS[1]
local increment = ARGV[1]
local cnt = redis.call('get', key) or 0
cnt = cnt + increment
if (cnt >= 0 and cnt <= 100) then
    redis.call('set', key, cnt)
    return cnt
end

Dessutom, om intervallet är [0, 2^N - 1] , då kan du använda BITFIELD kommando med spillkontroll för att lösa problemet.

BITFIELD key OVERFLOW FAIL INCRBY uN 0 increment

Det verkar dock inte ditt fall.




  1. Är det möjligt att ha en Linux VFS-cache med ett FUSE-filsystem?

  2. Mongo kan inte starta

  3. MongoDB $sqrt

  4. Hur kan jag se var mongoDB lagrar data? (det är inte standard /data/db!)