Redis Sorted Setタイプの説明

4829 ワード

Redis Sorted Setタイプの説明


Sorted setはRedisのデータ型であり、set型とhash型の混合と似ている.setタイプと同様にsorted setの要素は唯一で、重複できない文字列要素です.したがって、いくつかのシーンでは、sorted setタイプはsetタイプと同じです.
しかし、setタイプオブジェクトの要素は無秩序であり、sorted setタイプオブジェクトの各要素はscoreという浮動小数点値に関連付けられています(これもhashタイプと似ている理由です.各要素が同じ値をマッピングしているからです).
さらに、sorted setの要素は順番に取り出される(したがって、要求に基づいてソートされるのではなく、秩序性はsorted setデータ構造の特徴である).sorted setの要素は、次のルールでソートされます.
  • A要素がB要素に対応するscore値と異なる場合、scoreが大きい要素に対応する.
  • A要素がB要素に対応するscore値と同じである場合、AとB文字列を辞書順に比較する(sorted set中元素が唯一であるため、A文字列とB文字列は等しくない).

  • 簡単な例で始めましょう.ハッカーの名前をsorted setの要素として追加し、彼らの生まれた年をscore値として使用します.
    >zadd hackers 1940 "Alan Kay"
    (integer) 1
    >zadd hackers 1957 "Sophie Wilson"
    (integer) 1
    >zadd hackers 1949 "Anita Borg"
    (integer) 1
    >zadd hackers 1965 "Yukihiro Matsumoto"
    (integer) 1
    >zadd hackers 1914 "Hedy Lamarr"
    (integer) 1
    >zadd hackers 1916 "Claude Shannon"
    (integer) 1
    >zadd hackers 1969 "Linus Torvalds"
    (integer) 1
    >zadd hackers 1912 "Alan Turing"
    (integer) 1
    

    ご覧のように、ZADDコマンドはSADDコマンドと似ていますが、要素を追加する前にパラメータを1つ多く取ったのがscoreです.ZADDコマンドも一括操作をサポートしているので、上記の例が役に立たなくても、複数のscore-valueペアを自由に指定できます.
    このsorted setでは、ハッカーの出生年に従ってソートされたハッカーのリストを返すのは意味がありません.実際には、彼らはすでに順番に並んでいるからです.
    注意:Redis Sorted setは、skipリストとhash組成を含む両端品データ構造によって実現されるため、sorted setに要素操作を追加する時間の複雑さはO(log(N))である.これは良いですが、要素のソートを要求すると、redisは何もしません.順序が設定されているからです.
    >zrange hackers 0 -1
    1)"Alan Turing"
    2)"Hedy Lamarr"
    3)"Claude Shannon"
    4)"Alan Kay"
    5)"Anita Borg"
    6)"Richard Stallman"
    7)"Sophie Wilson"
    8)"Yukihiro Matsumoto"
    9)"Linus Torvalds"
    

    注意:0および-1は、インデックスが0の要素から最後の要素(LRANGEコマンドと同様)を表します.
    既存のソートとは逆に、若いものから最も古いものまで、ZREVRANGEコマンドを使用します.
    >zrevrange hackers 0 -1
    1)"Linus Torvalds"
    2)"Yukihiro Matsumoto"
    3)"Sophie Wilson"
    4)"Richard Stallman"
    5)"Anita Borg"
    6)"Alan Kay"
    7)"Claude Shannon"
    8)"Hedy Lamarr"
    9)"Alan Turing"
    

    WITHSCORESパラメータを使用して、scoreとともに出力することもできます.
    >zrange hackers 0 -1 withscores
    1)"Alan Turing"
    2)"1912"
    3)"Hedy Lamarr"
    4)"1914"
    5)"Claude Shannon"
    6)"1916"
    7)"Alan Kay"
    8)"1940"
    9)"Anita Borg"
    10)"1949"
    11)"Richard Stallman"
    12)"1953"
    13)Sophie Wilson"
    14)"1957"
    15)"Yukihiro Matsumoto"
    16)"1965"
    17)"Linus Torvalds"
    18)"1969"
    

    レンジアクション


    ZRANGEBYSCOREコマンドは、1950以下の個体を取得するなど、範囲クエリー操作に使用できます.
    >zrangebyscore hackers -inf 1950
    1)"Alan Turing"
    2)"Hedy Lamarr"
    3)"Claude Shannon"
    4)"Alan Kay"
    5)"Anita Borg"
    

    このコマンドは、負の無限値と1950(両端の境界に含まれる)の間のすべてのscore値の要素をRedisに返すように要求するか、または説明します.-infは負の無限を表す.
    ZREMRANGEBYSCOREコマンドは、1940~1960年生まれのハッカーを削除するなど、範囲削除操作に使用できます.
    >zremrangebyscore hackers 1940 1960
    (integer) 4
    

    ZREMRANGEBYSCOREは、最良のコマンド名ではないかもしれませんが、非常に役立ち、削除された要素の数を返します.
    もう1つのsorted set要素にとって極めて有用な動作ZRANKは、sorted setセット内の要素の位置を取得するためのランキング操作である.
    >zrank hackers "Linus Torvalds"
    (integer) 4
    

    同様に、ZREVRANKコマンドは、要素の反対方向からの位置を取得します.

    Lexicographical scores


    Redis 2.8では、辞書順に並べ替える機能が追加されました.sorted setのすべての要素の辞書の順序はC言語のmemcmp関数を比較して、いかなる調整をしていないで、安心して使用することができて、いかなるRedisの実例はすべて同じ結果を与えます.
    sorted set辞書に関するコマンドには、主にZRANGEBYLEX、ZREVRANGEBYLEX、ZREMRANGEBYLEX、ZLEXCOUNTがあります.
    >zadd hackers01 0 "Alan Kay" 0 "Sophie Wilson" 0 "Richard Stallman" 0 "Anita Borg" 0 "Yukihiro Matsumoto" 0 "Hedy Lamarr" 0 "Claude Shannon" 0 "Linus Torvalds" 0 "Alan Turing"
    (integer) 9
    

    Sorted setのソートルールのため、上の要素は辞書順にソートされています.
    >zrange hackers 0 -1
    1)"Alan Kay"
    2)"Alan Turing"
    3)"Anita Borg"
    4)"Claude Shannon"
    5)"Hedy Lamarr"
    6)"Linus Torvalds"
    7)"Richard Stallman"
    8)"Sophie Wilson"
    9)"Yukihiro Matsumoto"
    

    ZRANGEBYLEXコマンドを使用して、辞書の順序に従って一定の範囲の値を取得できます.
    >zrangebylex hackers [B [P
    1)"Claude Shannon"
    2)"Hedy Lamarr"
    3)"Linus Torvalds"
    

    scoreの更新:ランキング


    sorted setコレクションについて最後に注意したいのは、Sorted setのscoresがいつでも変更される可能性があることです.ZADDを呼び出してセットにすでに存在する要素を追加するだけで、Redisは時間複雑度O(log(N))のsorted setのscoresと位置を変更する操作を自動的に行います.したがって、sorted setは、大量の更新操作が必要なシーンに適しています.
    注意:この特徴のため、通常使用されるシーンはランキングです.