Redis,如何用ZINCRBY增加zset的所有分数?

han*_*luc 1 redis

有没有办法用一个命令增加zset的所有分数?这就是我想做的事情:

ZADD myzset 1 "first"
ZADD myzset 2 "second"
ZINCRBY myzset 2 "*"
ZRANGE myzset 0 -1 WITHSCORES
1) "first"
2) "3"
3) "second"
4) "4"
Run Code Online (Sandbox Code Playgroud)

但是,ZINCRBY myzset 2 "*"不是这样的.

Liv*_*tea 6

没有命令,ZINCRBY一次只能增加1个成员.因此,如果您想以原子和快速的方式完成此任务,则需要执行Lua脚本.哪个应该看起来像这样(首先你得到排序集的所有成员,然后迭代它们并增加分数):

local zsetMembers = redis.call('zrange', KEYS[1], '0', '-1') 
for k,member in pairs(zsetMembers) do 
  redis.call('zincrby', KEYS[1], 1, member) 
end
Run Code Online (Sandbox Code Playgroud)

您可以使用该EVAL命令将此脚本推送到Redis .