如何使用REDIS以最佳方式递增中等大小的排序集?(最好使用Java驱动程序JEDIS)集合中大约有100-200K条记录。我想将它们的分数按给定的双倍数字递增。
after
如果你想以最佳方式递增一个中等大小的排序集,可以使用REDIS(最好使用Java驱动程序JEDIS)。这个集合中大约有100-200K条记录。你可以通过给定的双倍数字来递增它们的分数。
1 a
2 b
3 c
after (增加1)
2 a
3 b
4 c
我想到的唯一可能的解决方案是:
- 通过网络获取所有已排序集合(例如A)的内容。(REDIS -> 应用程序)。
- 创建一个管道,在循环中使用ZADD或ZINCRBY将它们逐个增加到同一集合A中。
- 然后执行该管道。
更新
以下是如何使用EVAL和Lua在REDIS中进行for循环以递增所有已排序集合成员的方法。local members = redis.call('zrange',KEYS[1],0,-1)
for i, member in ipairs(members) do
redis.call('zincrby',KEYS[1],inc,member)
end
将此保存为字符串并使用您的驱动程序(在本例中为Java)运行eval。执行不返回任何内容。
使用Jedis。
// script is the script string
// 1 is the number of keys- keep it this way for this script
// myzset is the name of your sorted set
// 1.5 is the increment, you can use +/- values to inc/dec.
jedis.eval(script, 1, "myzset", "1.5");