首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis,如何使用ZINCRBY提高zset的所有分数?

Redis,如何使用ZINCRBY提高zset的所有分数?
EN

Stack Overflow用户
提问于 2015-07-25 01:57:22
回答 2查看 1.7K关注 0票数 1

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

代码语言:javascript
复制
ZADD myzset 1 "first"
ZADD myzset 2 "second"
ZINCRBY myzset 2 "*"
ZRANGE myzset 0 -1 WITHSCORES
1) "first"
2) "3"
3) "second"
4) "4"

但是,ZINCRBY myzset 2 "*"并不是这样工作的。

EN

回答 2

Stack Overflow用户

发布于 2015-07-25 03:45:16

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

代码语言:javascript
复制
local zsetMembers = redis.call('zrange', KEYS[1], '0', '-1') 
for k,member in pairs(zsetMembers) do 
  redis.call('zincrby', KEYS[1], 1, member) 
end

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

票数 7
EN

Stack Overflow用户

发布于 2017-07-20 11:55:31

如果你需要经常做这个任务,或者这是你的应用服务器的一段代码,也许你可以使用流水线来加速这个任务。如果您的zset大小为N,那么在您的客户端和redis服务器之间将有N个RTT。如果你使用管道,只需要一个RTT,这将节省网络传输时间。有关这方面的更多信息,请参阅此document。算法与@Liviu Costea相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31616886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档