Redis ZINTERSTOREコマンド徹底解説 – ソート済みセットの積集合を求める方法
このチュートリアルでは、Redisデータストアに保存された2つ以上のソート済みセット(ZSET)に対して、ZINTERSTOREコマンドを使って積集合(共通部分)の演算を行う方法を詳しく解説します。
集合の積集合とは?
集合論において、2つ以上の集合の積集合(intersection)とは、すべての集合に共通して含まれる要素だけを集めた集合のことです。以下の例を見てみましょう。
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8, 9}
A と B の積集合:
A ∩ B = {4, 5}
このように、AとBの両方に存在する「4」と「5」だけが積集合の結果となります。
ZINTERSTOREコマンドとは
ZINTERSTOREコマンドは、2つ以上の指定されたソート済みセットに対して積集合演算を実行し、その結果を新しいソート済みセットとして指定したキー(destination)に保存します。
主な仕様は以下の通りです。
- 存在しないソート済みセットは、空のソート済みセットとして扱われます。
- キーが存在するものの、そこに保存されている値がソート済みセットではない場合は、エラーが返されます。
- 結果は常にdestinationキーに保存されるため、元のセットは変更されません。
基本構文
redis host:post> ZINTERSTORE <destination> numkeys <keyName> [<keyName>] [WEIGHTS weight [weight]] [AGGREGATE SUM|MIN|MAX]
戻り値
- 積集合演算の結果得られた要素を含む配列(array) - キーが存在するが、値がソート済みセットでない場合はエラー
各オプションの詳細
numkeys(必須)
numkeysは、積集合演算の対象となる入力キーの数です。入力キーやその他のオプションよりも必ず先に指定する必要がある点に注意してください。
演算結果はdestinationキーに新しいソート済みセットとして保存されます。destinationキーがすでに存在する場合は、既存の値が上書きされます。
WEIGHTSオプション
WEIGHTSオプションを使用すると、各入力ソート済みセットに対する乗算係数(重み)を指定できます。すべての入力セット内の各要素のスコアは、集計関数に渡される前にこの係数で乗算されます。
WEIGHTSが指定されなかった場合、すべての乗算係数は1として扱われます。
AGGREGATEオプション
AGGREGATEオプションは、積集合の結果スコアをどのように集計するかを指定します。
- SUM(デフォルト): 要素が存在するすべての入力セット間でスコアを合計します。
- MIN: 各入力セットにおける最小のスコアを採用します。
- MAX: 各入力セットにおける最大のスコアを採用します。
実行例

参考資料
- 公式ドキュメント: ZINTERSTORE Command Docs(Redis公式サイト)
以上が、Redisに保存された2つ以上のソート済みセットに対してZINTERSTOREコマンドで積集合演算を行う方法の解説でした。この記事が役に立ったと思ったら、ぜひコメント欄で感想を共有したり、他の方にもシェアしてみてください。
-
Redis ZCARDコマンドの使い方 – ソート済みセットの要素数を取得する方法
このチュートリアルでは、Redisのコマンド「ZCARD」を使用して、指定したキーに保存されたソート済みセット(Sorted Set)のサイズ(要素数)を取得する方法を解説します。redis-cliにおけるZCARDコマンドの基本構文は以下のとおりです。 構文 redis host:post> ZCARD <key name> 戻り値 (integer) ソート済みセットに含まれる要素数を表す整数値 (integer) 0:指定したキーが存在しない場合 エラー:キーは存在するが、値がソート済みセットではない場合 ZCARDコマンドの計算量はO(1)であるため、セットに大量の要
-
Redis ZINCRBYコマンドの使い方 – Redisでソート済みセットの要素スコアをインクリメントする方法
このチュートリアルでは、Redisデータストアに保存されたソート済みセット(Sorted Set)型の値について、特定の要素のスコアをインクリメントする方法を学びます。この操作には、redis-cliでZINCRBYコマンドを使用します。 ZINCRBYコマンドは、キーに保存されているソート済みセットの値の中から指定した要素を探し、そのスコアを指定した値(increment)だけ増加させるために使用します。もし指定した要素がソート済みセット内に存在しない場合は、その要素が新しく追加され、指定したincrement値がスコアとして設定されます。また、キー自体が存在しない場合には、指定した要素のみ