在 REDIS 中增加中等大小的排序集的最佳方法是什么?(最好使用 java 驱动 JEDIS) Set 中有大约 100-200K 的记录。我想将他们的分数增加一个给定的双数。
前
1 a
2 b
3 c
之后(增加 1)
2 a
3 b
4 c
我想出的唯一可能的解决方案是:
- 通过网络获取所有已排序的集合(例如 A)内容。(REDIS -> 应用程序)。
- 创建一个管道,在同一个 setA 中使用 ZADD 或 ZINCRBY 在循环中递增它们
- 然后执行管道。
还有另一种/更好的方法吗?
更新
以下是如何在 REDIS 中使用 EVAL 和 Lua 执行 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。执行什么也不返回。
使用绝地武士
// 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");