Redis INCRBY有限制

时间:2017-04-26 11:27:19

标签: lua redis

我想知道是否有办法在redis中通过我的应用程序进行一次往返来执行此操作:

对于给定的密钥K,其可能的值V是范围[A, B]内的任何整数。基本上,它有一个上下边界。

当发出INCRBYDECRBY命令时(例如INCRBY key 10),如果结果值不在界限范围内,它将仅执行

我需要这个操作是原子的,我想知道是否有办法避免使用Lua脚本。

谢谢。

1 个答案:

答案 0 :(得分:3)

这个答案可能不是你所期望的。但我不得不说Lua脚本是一个明确的解决方案。

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

此外,如果范围是[0, 2^N - 1],那么您可以使用带溢出控制的BITFIELD命令来解决问题。

BITFIELD key OVERFLOW FAIL INCRBY uN 0 increment

然而,这似乎不是你的情况。