Redis
 sql >> Base de données >  >> NoSQL >> Redis

Redis INCRBY avec limites

Cette réponse n'est peut-être pas ce à quoi vous vous attendiez. Mais je dois dire que les scripts Lua sont la solution la plus claire.

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

Aussi, si la plage est [0, 2^N - 1] , alors vous pouvez utiliser BITFIELD commande avec contrôle de débordement pour résoudre le problème.

BITFIELD key OVERFLOW FAIL INCRBY uN 0 increment

Cependant, cela ne semble pas votre cas.