Redis スコアの積集合を取得する

Redis スコアの積集合を取得する

Redisで、スコアの積集合を取得する手順を記述してます。「zinterstore」で可能です。ここでは、実際に実行した結果を掲載してます。

環境

  • OS CentOS Stream release 9
  • Redis 7.0.5

手順

スコアの積集合を取得するには、「zinterstore」を使用します。

zinterstore 和集合するキー名 和集合する数 キー名 キー名 キー名

以下のスコアを作成してから、積集合を取得してみます。

127.0.0.1:6379> zadd zs1 1 aaa 2 bbb 3 ccc 
(integer) 3

127.0.0.1:6379> zadd zs2 1 aaa 3 ccc 4 ddd
(integer) 3

積集合を「intersection1」に取得してみます。

127.0.0.1:6379> zrange intersection1 0 -1 withscores
1) "aaa"
2) "2"
3) "ccc"
4) "6"

確認します。
※「zrange」に「0」から「-1」を指定すると全件取得することができます。

127.0.0.1:6379> zrange intersection1 0 -1 withscores
1) "aaa"
2) "2"
3) "ccc"
4) "6"

3つのキーで実行してみます。

127.0.0.1:6379> zinterstore intersection1 3 zs1 zs2 zs3
(integer) 1

127.0.0.1:6379> zrange intersection1 0 -1 withscores
1) "aaa"
2) "3"

3つのキーの積集合が取得されていることが確認できます。

WEIGHTSオプション

WEIGHTSを使用すると、各キーの値が指定した値の倍になって計算されます。

zs1を2倍に、zs2を3倍にして積集合を求めてみます。

127.0.0.1:6379> zrange zs1 0 -1 withscores
1) "aaa"
2) "1"
3) "bbb"
4) "2"
5) "ccc"
6) "3"

127.0.0.1:6379> zrange zs2 0 -1 withscores
1) "aaa"
2) "1"
3) "ccc"
4) "3"
5) "ddd"
6) "4"

127.0.0.1:6379> zinterstore intersection1 2 zs1 zs2 weights 2 3
(integer) 2

127.0.0.1:6379> zrange intersection1 0 -1 withscores
1) "aaa"
2) "5"
3) "ccc"
4) "15"