Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

Redis ZRANGEコマンド徹底解説 – ソート済みセットから指定ランク範囲の要素を昇順で取得する方法

このチュートリアルでは、RedisのZRANGEコマンドを使って、スコアが昇順に並んだソート済みセット(Sorted Set)から、指定したランク範囲内の1つまたは複数の要素を取得する方法を詳しく解説します。

ZRANGEコマンドとは

ZRANGEコマンドは、指定したキーに保存されているソート済みセットの中から、指定した範囲に含まれる1つ以上の要素を返します。ソート済みセット内の要素はスコアの昇順に並んでおり、同じスコアを持つ要素同士は辞書順(レキシコグラフィカル順)で比較されます。

範囲はstart(開始位置・範囲に含む)とend(終了位置・範囲に含む)のオフセットによって定義されます。これらのオフセットは0始まりのインデックスで、0が最初の要素、1が2番目の要素を意味します。また、負の数を指定するとリストの末尾からの位置になります。-1が最後の要素、-2が最後から2番目の要素という具合です。

範囲外のオフセットの扱い

範囲外のオフセットが指定された場合、以下のように処理されます。

  1. start > end、または start > ソート済みセットのサイズの場合:結果は空のリストになります。
  2. end > ソート済みセットのサイズの場合:endオフセットはソート済みセットの最後の要素のインデックスとして扱われます。

キーが存在しない場合は空のセットが返されます。一方、キーは存在するものの、保存されている値がソート済みセット型ではない場合はエラーが返されます。

さらに、WITHSCORES(省略可能)引数をコマンドに渡すことで、要素と一緒にそのスコアも取得できます。この場合、戻り値の配列は value1, ..., valueN ではなく、value1, score1, ..., valueN, scoreN という形式になります。

構文

RedisのZRANGEコマンドの構文は以下のとおりです。

redis host:port> ZRANGE <keyname> <start> <stop> [ WITHSCORES ]

戻り値

- (array) reply:指定した範囲内のソート済みセットの要素を表す配列
- 空のセット:キーが存在しない場合
- エラー:キーが存在するが、保存されている値がソート済みセット型でない場合

実行例

Redis ZRANGEコマンド徹底解説 – ソート済みセットから指定ランク範囲の要素を昇順で取得する方法

参考資料

  1. ZRANGEコマンド公式ドキュメント

以上、ZRANGEコマンドを使用して、指定したランク範囲内のソート済みセットの要素をスコアの昇順で取得する方法をご紹介しました。この記事がお役に立ちましたら、ぜひコメント欄でご感想をお聞かせください。また、他の方へのシェアも大歓迎です。

  1. Redis ZREVRANGEBYSCOREコマンド徹底解説!スコア範囲を指定してソート済みセットの要素を降順で取得する方法

    このチュートリアルでは、RedisのZREVRANGEBYSCOREコマンドを使用して、指定したスコア範囲内に含まれるソート済みセット(Sorted Set)の全要素を、スコアの降順で取得する方法を詳しく解説します。 ZREVRANGEBYSCOREコマンドとは ZREVRANGEBYSCOREコマンドは、引数として渡されたmax(最大値)以下かつmin(最小値)以上のスコアを持つ、ソート済みセット内のすべての要素を返します。要素はスコアの降順で返され、同一のスコアを持つ要素同士は辞書順の逆順(降順)で並べられます。 デフォルトではmaxとminは閉区間(境界値を含む)として扱われますが、値の

  2. Redis ZRANGEBYSCOREコマンドの使い方 – スコア範囲を指定してソート済みセットの要素を昇順に取得する方法

    このチュートリアルでは、RedisのZRANGEBYSCOREコマンドを使用して、指定したスコア範囲内にあるソート済みセット(sorted set)のすべての要素を、スコアの昇順で取得する方法について解説します。 ZRANGEBYSCOREコマンドとは ZRANGEBYSCOREコマンドは、引数として渡されたmin(最小値)以上かつmax(最大値)以下のスコアを持つ、ソート済みセット内のすべての要素を返します。返される要素はスコアの昇順に並べられ、同じスコアを持つ要素同士は辞書順(レキシコグラフィカル順)で昇順に配置されます。 デフォルトではminとmaxは閉区間(境界値を含む)として扱われま