誤解ZADD
して意図したよりも多くのセットを作成しているか、ユニオンを使用する必要があるときに交差を使用しているようです。両方を見てみましょう:
より少ないセットを作成する
潜在的な問題の1つは、6つのセットを作成しているのに、代わりに2つのセットを作成したい場合があることです。集合の内包的記法では、これを行っています。
la.41 = {kfc}
la.42 = {mdl}
la.43 = {apple}
代わりに、これを実行したい場合:
la = {kfc, mdl, apple}
これがあなたがやろうとしていることであるなら、あなたはZADD
コマンドを誤解しています。
ZADD
キー、スコア、およびメンバーを取ります。キーはセットの名前、メンバーはセットに追加するもの、スコアはセット内のメンバーの位置と考えることができます。
たとえば、コマンドを実行すると、スコアが。のメンバーを持つZADD foo 1 a
というセットが作成されます。スコアを1秒間無視すると、状況は次のようになります。foo
a
1
foo = {a}
ここで実行すると、既存のセットZADD foo 2 b
にメンバーが追加されます。b
foo
foo = {a, b}
各コマンドで異なるキーを使用しているZADD
ため、各コマンドで新しいセットを作成しています。同じキー、つまり同じセットを使用する場合:
ZADD la 41 kfc
ZADD la 42 mdl
最終的に単一のセットを作成します。
la = {kfc, mdl}
ユニオン対交差点
別の方法は、 6つのセットを作成したいが、交差ではなくユニオンが必要なことです。
2つのセットの和集合は、元のセットのいずれかに存在していたすべての要素を含むセットです。
{1, 2} ∪ {2, 3} = {1, 2, 3}
2つのセットの共通部分は、元のセットの両方に存在していたすべての要素を含むセットです。
{1, 2} ∩ {2, 3} = {2}
共通の要素を持たない6つのセットを作成し、それらの共通部分を取得します。
{kfc} ∩ {mdl} ∩ {apple} ∩ {kfc} ∩ {mdl} ∩ {apple} = {}
代わりにユニオンを使用している場合は、結果のセットにすべての要素が含まれることになります。
{kfc} ∪ {mdl} ∪ {apple} ∪ {kfc} ∪ {mdl} ∪ {apple} = {kfc, mdl, apple}
ZUNIONSTORE
これは、の代わりにRedisコマンドを使用して実現できますZINTERSTORE
。