【Redis】ZPOPMAX・BZPOPMAXコマンドでソート済みセットの最高スコア要素を取得・削除する方法
このチュートリアルでは、Redisデータストアに保存されたソート済みセット(Sorted Set)から、ZPOPMAXおよびBZPOPMAXコマンドを使用して最高スコアの要素を削除しながら取得する方法を解説します。
ZPOPMAXコマンドとは
ZPOPMAXコマンドは、指定したキーに保存されたソート済みセットから、スコアが最も高い要素を1つ以上削除し、その要素を返します。オプション引数としてcount(削除する要素の総数)を指定でき、省略した場合はデフォルトで1が適用されます。要素が返される際は、最もスコアの高い要素が先頭となり、以降はスコアの低い順に並んで返されます。
なお、キーが存在するものの、その値がソート済みセット型ではない場合はエラーが返されます。また、キー自体が存在しない場合はNil(空)が返されます。
構文
redis host:port> ZPOPMAX <keyname> <count>
戻り値
- (array) ソート済みセットの要素とスコアを表す配列 - (nil) キーが存在しない場合 - エラー キーは存在するが、値がソート済みセット型でない場合
実行例

BZPOPMAXコマンドとは
BZPOPMAXコマンドは、ZPOPMAXのブロッキング版にあたるコマンドです。指定されたすべてのソート済みセットが空である場合や、すべてのキーが存在しない場合など、ポップできる要素が存在しないときには、操作がブロックされます。
指定したキーは左から右へ順番にチェックされ、最初に見つかった空でないソート済みセットから、最高スコアの要素を削除して返します。例えば、BZPOPMAX set1 set2 set3 0を実行したケースを考えてみましょう。set1が存在せず(空のセットとして扱われる)、set2が空のセット、set3に3つの要素が含まれている場合、set1からset3へチェックした際に最初の非空セットとなるset3から、最高スコアの要素が削除されて返されます。
このコマンドはtimeout(整数)を引数として受け取り、これはブロックする最大秒数を表します。timeoutに0を指定すると、無期限にブロックし続けます。
構文
redis host:port> BZPOPMAX <keyname> [<keyname> ...] <timeout>
戻り値
- (array) 3つの要素を持つ配列。第1要素はソート済みセットのキー名、 第2要素はポップされた要素のスコア、第3要素はポップされた要素そのもの。 - (nil) 要素をポップできず、タイムアウトが経過した場合。
実行例

参考資料
以上が、Redisデータストアに保存されたソート済みセットから最高スコアの要素を削除して取得する方法の解説でした。この記事が役に立ったと感じていただければ、ぜひコメント欄でご意見をお聞かせください。また、他の方にもシェアしていただけると幸いです。
-
Redis ZREVRANGEBYSCOREコマンド徹底解説!スコア範囲を指定してソート済みセットの要素を降順で取得する方法
このチュートリアルでは、RedisのZREVRANGEBYSCOREコマンドを使用して、指定したスコア範囲内に含まれるソート済みセット(Sorted Set)の全要素を、スコアの降順で取得する方法を詳しく解説します。 ZREVRANGEBYSCOREコマンドとは ZREVRANGEBYSCOREコマンドは、引数として渡されたmax(最大値)以下かつmin(最小値)以上のスコアを持つ、ソート済みセット内のすべての要素を返します。要素はスコアの降順で返され、同一のスコアを持つ要素同士は辞書順の逆順(降順)で並べられます。 デフォルトではmaxとminは閉区間(境界値を含む)として扱われますが、値の
-
Redis ZRANGEBYSCOREコマンドの使い方 – スコア範囲を指定してソート済みセットの要素を昇順に取得する方法
このチュートリアルでは、RedisのZRANGEBYSCOREコマンドを使用して、指定したスコア範囲内にあるソート済みセット(sorted set)のすべての要素を、スコアの昇順で取得する方法について解説します。 ZRANGEBYSCOREコマンドとは ZRANGEBYSCOREコマンドは、引数として渡されたmin(最小値)以上かつmax(最大値)以下のスコアを持つ、ソート済みセット内のすべての要素を返します。返される要素はスコアの昇順に並べられ、同じスコアを持つ要素同士は辞書順(レキシコグラフィカル順)で昇順に配置されます。 デフォルトではminとmaxは閉区間(境界値を含む)として扱われま