私は現在、次のようなデータセットを持っています:
チャネル 1 = ユーザー 1、ユーザー 2、ユーザー 3
チャネル 2 = ユーザー 4、ユーザー 5、ユーザー 6
(注 - これらは実際の名前ではなく、テキストは予測可能なシーケンスではありません)
次の機能を最大限に最適化したいと考えています。
1) ユーザーをチャンネルに追加する
2) チャンネルからユーザーを削除する
3) 選択したいくつかのチャネルのすべてのユーザーのリストを取得し、ユーザーがどのチャネルにいるのかを把握します (重要な場合は、実際のユーザーのリストを取得せずに、チャネルにユーザーがいるかどうかを単純に確認することもできます)。
4) 特定のユーザーがチャンネルにいるかどうかを検出します (必要に応じてこの機能を差し控えます)。
一度に複数のキーを取得する方法が 2 つしかないという事実に、私は少し夢中になっています。
A) 通常のキーと mget key1、key2、key3 を使用する
- このソリューションでは、各値は JSON 文字列になり、クライアント側で操作およびクエリを実行して、値を追加/削除/決定できます。これ自体にはいくつかの問題があります。まず、処理中に別のクライアントがデータを変更する可能性があり (つまり、このソリューションはアトミックではありません)、チャネルに特定のユーザーが含まれているかどうかをすぐに検出するのは簡単ではありませんが、チャネルにユーザーがいるかどうかを検出します (上記のように、これは優先度が低くなります)
B) セットとサニオンの使用
- どういうわけかこのソリューションにセットを使用したいのですが、上記のソリューションは間違っているようです...しかし、一度に複数のセットを照会し、各メンバーがどのセットからのものか、またはセットのいずれかに関する情報を維持する方法がわかりません組合には0人のメンバーがいます(sunionは、結合されたすべてのメンバーの最終セットのみを提供します)
上記のポイント1〜4を最適な時間とアトミック操作で実装できるソリューションはありますか?
編集:私の特定のケースで機能する可能性のあるアイデアの1つは、チャネル名をユーザー名の一部として保存し、セットを使用することです。それでも、より一般的な答えを得ることは素晴らしいことです