Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Redis INCRBY mit Grenzen

Diese Antwort ist möglicherweise nicht das, was Sie erwarten. Aber ich muss sagen, dass Lua-Scripting die glasklare Lösung ist.

-- 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

Auch wenn der Bereich [0, 2^N - 1] ist , dann können Sie BITFIELD verwenden Befehl mit Überlaufkontrolle, um das Problem zu lösen.

BITFIELD key OVERFLOW FAIL INCRBY uN 0 increment

Dies scheint jedoch nicht der Fall zu sein.