Câu trả lời này có thể không phải là những gì bạn mong đợi. Nhưng tôi phải nói rằng Lua scripting là giải pháp rõ ràng.
-- 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
Ngoài ra, nếu phạm vi là [0, 2^N - 1]
, thì bạn có thể sử dụng BITFIELD
lệnh có kiểm soát tràn để giải quyết vấn đề.
BITFIELD key OVERFLOW FAIL INCRBY uN 0 increment
Tuy nhiên, đó có vẻ không phải là trường hợp của bạn.