Redis スコアのランクを範囲を指定して削除する

Redis スコアのランクを範囲を指定して削除する

Redisで、スコアのランクを範囲を指定して削除する手順を記述してます。

環境

  • OS Ubuntu 21.10 (Impish Indri)
  • Redis 6.2.6

手順

スコアのランクを範囲を指定して削除するには、「zremrangebyrank」を使用します。

zremrangebyrank キー名 ランクの開始位置 ランクの終了位置

以下のスコアを設定して、削除してみます。

127.0.0.1:6379> zadd zs1 1 aaa 3 bbb 5 ccc 2 ddd 9 eee
(integer) 5

各メンバーのランクを確認します。

127.0.0.1:6379> zrevrank zs1 aaa
(integer) 4

127.0.0.1:6379> zrevrank zs1 bbb
(integer) 2

127.0.0.1:6379> zrevrank zs1 ccc
(integer) 1

127.0.0.1:6379> zrevrank zs1 ddd
(integer) 3

127.0.0.1:6379> zrevrank zs1 eee
(integer) 0

ランクが「1」から「3」の範囲を指定して削除します。

127.0.0.1:6379> zremrangebyrank zs1 1 3
(integer) 3

削除されていることが確認できます。「zrange」に「0」から「-1」を指定すると全件取得することができます。

127.0.0.1:6379> zrange zs1 0 -1 withscores
1) "aaa"
2) "1"
3) "eee"
4) "9"

該当する範囲に値がなければ「0」が返ります。

127.0.0.1:6379> zremrangebyrank zs1 10 11
(integer) 0

全件削除

「0」から「-1」を指定すると全件削除されます。

127.0.0.1:6379> zadd zs1 1 aaa 3 bbb 5 ccc 2 ddd 9 eee
(integer) 5

127.0.0.1:6379> zremrangebyrank zs1 0 -1
(integer) 5

127.0.0.1:6379> zrange zs1 0 -1 withscores
(empty array)