REDIS で中サイズのソート済みセットをインクリメントする最良の方法は何ですか? (できれば Java ドライバー JEDIS を使用) Set には約 100 ~ 200K のレコードが含まれます。指定された倍数でスコアを増やしたいです。
前
1 a
2 b
3 c
後 (1 ずつ増加)
2 a
3 b
4 c
私が思いついた唯一の解決策は次のとおりです。
- ネットワークを介してすべてのソートされたセット (A など) のコンテンツを取得します。(REDIS -> アプリケーション)。
- パイプラインを作成し、ループ内の ZADD または ZINCRBY を使用して同じ setA でそれらをインクリメントします
- 次に、パイプラインを実行します。
それを行う別の/より良い方法はありますか?
アップデート
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");