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の要素は、次のルールでソートされます.
簡単な例で始めましょう.ハッカーの名前を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は、大量の更新操作が必要なシーンに適しています.
注意:この特徴のため、通常使用されるシーンはランキングです.