Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有redis功能执行zincrby的上限和下限?_Redis - Fatal编程技术网

是否有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

这是一种利用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> 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])
结束
返回值