是否有redis功能执行zincrby的上限和下限?
这是一种利用redis原子特性执行上下限zincrby的方法吗是否有redis功能执行zincrby的上限和下限?,redis,Redis,这是一种利用redis原子特性执行上下限zincrby的方法吗 zadd set1 1 a 2 b zincby -2 a zrevrange set1 0 -1 withscores --> instead of ** b 2 a -1 ** how to get ** b 2 a 0 ** with a single redis function? 没有这样的内置Redis函数,但编写一个Lua脚本(有关更多信息,请参阅)并不难: 127.0.0.1:6379> Z
zadd set1 1 a 2 b
zincby -2 a
zrevrange set1 0 -1 withscores
--> instead of
** b 2 a -1 **
how to get
** b 2 a 0 **
with a single redis function?
没有这样的内置Redis函数,但编写一个Lua脚本(有关更多信息,请参阅)并不难:
127.0.0.1:6379> ZADD set1 1 a 2 b
(integer) 2
127.0.0.1:6379> EVAL "local val = redis.call('ZINCRBY', KEYS[1], ARGV[1], ARGV[2]) if tonumber(val) < 0 then redis.call('ZADD', KEYS[1], 0, ARGV[2]) end return val" 1 set1 -2 a
(integer) 0
127.0.0.1:6379> ZREVRANGE set1 0 -1 WITHSCORES
1) "b"
2) "2"
3) "a"
4) "0"
127.0.0.1:6379>zaddset1a2b
(整数)2
127.0.0.1:6379>EVAL“local val=redis.call('ZINCRBY',key[1],ARGV[1],ARGV[2])如果tonumber(val)<0,则redis.call('ZADD',key[1],0,ARGV[2])end return val“1设置1-2 a
(整数)0
127.0.0.1:6379>ZREVRANGE设置1 0-1带芯
1) “b”
2) "2"
3) “a”
4) "0"
以下是相同的脚本,仅为便于阅读而格式化:
local val = redis.call('ZINCRBY', KEYS[1], ARGV[1], ARGV[2])
if tonumber(val) < 0 then
redis.call('ZADD', KEYS[1], 0, ARGV[2])
end
return val
local val=redis.call('ZINCRBY',键[1],ARGV[1],ARGV[2])
如果tonumber(val)<0,则
redis.call('ZADD',键[1],0,ARGV[2])
结束
返回值
没有这种内置的Redis功能,但是编写一个Lua脚本(有关更多信息,请参阅)来实现它应该不会太难:
127.0.0.1:6379> ZADD set1 1 a 2 b
(integer) 2
127.0.0.1:6379> EVAL "local val = redis.call('ZINCRBY', KEYS[1], ARGV[1], ARGV[2]) if tonumber(val) < 0 then redis.call('ZADD', KEYS[1], 0, ARGV[2]) end return val" 1 set1 -2 a
(integer) 0
127.0.0.1:6379> ZREVRANGE set1 0 -1 WITHSCORES
1) "b"
2) "2"
3) "a"
4) "0"
127.0.0.1:6379>zaddset1a2b
(整数)2
127.0.0.1:6379>EVAL“local val=redis.call('ZINCRBY',key[1],ARGV[1],ARGV[2])如果tonumber(val)<0,则redis.call('ZADD',key[1],0,ARGV[2])end return val“1设置1-2 a
(整数)0
127.0.0.1:6379>ZREVRANGE设置1 0-1带芯
1) “b”
2) "2"
3) “a”
4) "0"
以下是相同的脚本,仅为便于阅读而格式化:
local val = redis.call('ZINCRBY', KEYS[1], ARGV[1], ARGV[2])
if tonumber(val) < 0 then
redis.call('ZADD', KEYS[1], 0, ARGV[2])
end
return val
local val=redis.call('ZINCRBY',键[1],ARGV[1],ARGV[2])
如果tonumber(val)<0,则
redis.call('ZADD',键[1],0,ARGV[2])
结束
返回值