我想知道是否有一种方法可以通过我的应用程序的单次往返在 Redis 中执行此操作:
对于给定的键K
,其可能值V
是范围内的任意整数[A, B]
。基本上,它有上限和下限。
When an INCRBY
or DECRBY
发出命令(例如INCRBY key 10
)它将被执行only如果结果值没有超出范围。
我需要这个操作是原子的,并且我想知道是否有办法避免为此编写 Lua 脚本。
谢谢。
这个答案可能不是你所期望的。但我不得不说 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
然而,这似乎不是你的情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)