Redis クラスター RTT

Redis クラスター RTT

現在、データ ストアとして Redis を使用しています。ユーザーをランク付けしてページ分けする必要がある新しいセクションを作成しています。ランクとユーザー ID の保持にはソート セットを使用し、ユーザーのプロファイル データを保持するにはハッシュを使用することを考えます。同僚から、HGET を使用してユーザー プロファイル データを取得するには、Redis に多くの要求を行う必要があると指摘されました。そのため、ラウンド トリップ時間が問題になります。HMGET を使用する予定でしたが、調査した結果、キーが異なる Redis ノードに格納されるため、Redis がクラスター化されていると問題が発生する可能性があることがわかりました。phpredis を使用していますが、クライアント側シャーディングがあります (それが何なのか理解できません)。

私は次のようにしようと思っていました:

ランク

zadd userRank 1 5
zadd userRank 2 2
zadd userRank 3 4
zadd userRank 4 3

ユーザープロフィール

hset userProfile user:5 "{'userId':'5','name':'usera'}"
hset userProfile user:4 "{'userId':'4','name':'userb'}"
hset userProfile user:3 "{'userId':'3','name':'userc'}"
hset userProfile user:2 "{'userId':'2','name':'userb'}"

1) HMGET はクラスター化された Redis で正常に動作しますか?

2) そうでない場合はどうすればいいですか?

3) これを実装するより良い方法はありますか?

答え1

  1. HMGETは単一のキーにのみ関連しているため、クラスタ化されたRedisで動作するはずです。各HMGETはキーを含むノードに転送されます。
  2. /
  3. シリアル化されたすべてのユーザーをハッシュに保存するのは良い考えではありません。一部のフィールドを要求/増加/減少させる機能が失われます。

好む:

hmset user:5 userId 5 name usera
hmset user:4 userId 4 name userb
hmset user:3 userId 3 name userc
hmset user:2 userId 2 name userb

ランキングスキーマは問題ありません。上位のユーザーを取得してページ分割するには、ZREVRANGEBYSCOREそして各ユーザーにリクエストします。

注記:クラスタリングは同じではありませんシャーディング

関連情報