Redisで中程度から大規模なリスト/セット/Zset/Hashを作成する最も効率的な方法は何ですか?

StackOverflow https://stackoverflow.com/questions/4665759

質問

使用 Redis, 、データ構造全体を取得するための多くのコマンドがあります(lrange リストのために、 スメルズ セットの場合、 Zrange 並べ替えられたセットの場合 hgetall ハッシュの場合)。

ハッシュのみがメソッドを持っています(hmset)単一のコマンドで複数のアイテムを挿入する。

私が見たすべての例は、一度に単一のアイテムをリストに追加するだけで示しています(スルー rpush また lpushまたはセット(スルー 悲しい/ザッド).

私が解決したいより具体的な問題は、データベースIDを含むリストとソートされたセットを作成することです。これらのリストは各ユーザーに固有のもので、数百から数千のIDを含みます。

通常、データベースクエリから収集され、メモリに少しマッサージされ、レディスに保存されて、サブセット(セットとソートセット)を取得するためにページング(リスト)またはセットベースの操作を実行します。

現在、リストを繰り返して、各要素に適切な追加方法を呼び出しています。これには、ワイヤー上で複数のリクエストを行い、毎回キーを繰り返すという欠点があります。

redis> RPUSH employee:ids 1000
(integer) 1
redis> RPUSH employee:ids 1001
(integer) 2
redis> RPUSH employee:ids 1002
(integer) 3
redis> RPUSH employee:ids 1003
(integer) 4
redis> del employee:ids
(integer) 1

使用していると思っています 取引マルチexec それを単一のリクエストに変えるのに役立つかもしれませんが、それは繰り返されるキーでは役に立たないでしょう。

redis> MULTI
OK
redis> RPUSH employee:ids 1000
QUEUED
redis> RPUSH employee:ids 1001
QUEUED
redis> RPUSH employee:ids 1002
QUEUED
redis> RPUSH employee:ids 1003
QUEUED
redis> RPUSH employee:ids 1004
QUEUED
redis> EXEC
1. (integer) 1
2. (integer) 2
3. (integer) 3
4. (integer) 4
5. (integer) 5

単一のコマンドにリスト/セットに要素を追加できる、または毎回キーを繰り返すことなく、私が欠けているものはありますか?

それが重要な場合(またはJVMから使用できる別のライブラリがある場合)、Jedisクライアントライブラリも使用しています。

役に立ちましたか?

解決

ここでは、トランザクションを設定することは役に立ちません。トランザクションの目的は、コマンドが同時に実行されるようにして、サーバーに半分のリストがないことを確認することです。彼らはまだ一度に1つずつ送られます。

複数のコマンドが実際にパフォーマンスの問題を引き起こしていますか? 1000個のアイテムは実際にはそれほど多くありません。各アイテムの新しい接続を開くようなことをしていない限り、潜伏期の問題はないはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top