0

セットアップ: 3 種類のデータを redis に格納するアプリケーションを想像してください:
1. セッション情報
2. ユーザー ステータス (オンライン/オフライン)
3. ユーザー 3 つの好きな色

これをセットアップするための適切なアーキテクチャについてお聞きしたいと思います。私はすべきですか
:すべてを異なるキーで保存するだけですか?例:
a1) キー = "セッション ID"、値 = "セッション情報"、
a2) 各ステータスをキー = "ユーザー ID"、値 = "オンライン || オフライン" で保存、
a3) それぞれを保存好きな色: key = "ユーザーの色 1 || ユーザーの色 2 || ユーザーの色 3"、値 = "色の名前"

b. 異なるキーでセッションを保存し、ステータス/お気に入りの色のセットを使用しますか? すなわち:
b1) 各セッションを次のように保存します: key = "
b2) オンラインとオフラインの 2 つのセットを作成します。オンライン ユーザーごとに「オンライン セット」、オフライン ユーザーごとに「オフライン セット」
b3) ユーザーごとに「カラー セット」を作成します。各セットには、3 つの好きな色を保存します。

c. 異なるキーでセッションを保存し、ステータス/お気に入りの色のリストを使用しますか?
c1) 各セッションを保存: キー = "セッション ID"、値 = "セッション情報"、
c2) オンラインとオフラインの 2 つのリストを作成: 各オンライン ユーザーを「リスト オンライン」に、各オフライン ユーザーを「リスト オフライン」に
c3) 作成各ユーザーの「色リスト」: 各リストには、3 つのお気に入りの色を保存します。

d. 他のオプション?

私は主にパフォーマンスに関心があります。できるだけ効率的にするために、セッション、ステータス、色に対してクエリを実行したい(500万人以上のユーザーを想定)。

4

1 に答える 1

0

セッション用のストリングスをやります。シンプルで、有効期限を設定できます ( SETEX)。

色に関しては、セットのメモリ オーバーヘッドが発生するため、3 つの色すべてを 1 つの文字列値として保存し、JSONまたはMessagePack (例SET colors:<user_id> '["red", "blue", "green"]') でシリアル化します。

ユーザーのステータスについては、ユーザーがオンラインでない場合はオフラインであることを意味するため、オンラインのユーザーを保存するだけで、2 つのセットを保持する時間とスペースを節約できます。私の経験から、redis はこれをセットとして処理するのに十分な速度ですが、別のオプションでは、redis ビットマップを使用してこのデータを処理します。詳細については、ブログ投稿Chandra Patniを参照してください。

于 2012-07-01T05:17:30.450 に答える