redisの秩序化集合タイプ(Zset)——ランキングの実現

3258 ワード

Redis秩序集合はRedis集合と類似しており,同じ文字列を含まない集合である.これらの違いは、各順序付き集合のメンバーには、順序付き集合のメンバーを最低点から最高点に並べるためのスコアが関連付けられていることです.
秩序化された集合を使用すると、要素の追加、削除、更新を非常に迅速に(O(log(N))行うことができます.要素は挿入時に順番に並べられるので、すぐにスコア(score)または順位(position)によって範囲の要素が得られる.秩序化された集合の中間要素にアクセスするのも非常に速いので、秩序化された集合を重複メンバーを使用しないスマートリストとして使用することができます.このリストでは、秩序化された要素、迅速な存在性テスト、迅速なコレクションの中間要素へのアクセスを簡単に行うことができます.
簡単に言えば、秩序化された集合を使用すると、他のデータベースでは実現しにくい多くのタスクをうまく実行できます.
at first、まずデータを追加します.
> zadd member_list 10 a 3 b 1 c 4 d 7 e
(integer) 5
#  5,     5     。           
> zadd member_list 9 a 8 f
(integer) 1
#    ,   1,   2,   a              ,      。
> zrange member_list 0 6 WITHSCORES
1) "c"
2) 1.0
3) "b"
4) 3.0
5) "d"
6) 4.0
7) "e"
8) 7.0
9) "f"
10) 8.0
11) "a"
12) 9.0

秩序化された集合ソートのルールは、分母のサイズに応じて、分母が集合の前に小さく並ぶことを示しています.
次の表に、ソート・セットの基本コマンドを示します.
S.N.
コマンド&説明
1
ZADD key score 1 member 1[score 2 member 2]秩序化されたセットに1つ以上のメンバーを追加するか、またはそのスコアが更新されている場合
2
ZCARDkeyで得られた秩序化された集合メンバーの数
3
ZCOUNT key min maxは、秩序化された集合メンバーと所与の値の範囲内のスコアを計算します.
4
ZINCRBY key increment member秩序化集合でメンバーのスコアを増加
5
ZINTERSTORE destination numkeys key [key ...]複数のクロスソート・セットを格納し、新しいキー・シーケンス・セットを生成します.
6
ZLEXCOUNT key min maxは、指定された辞書範囲間の秩序化された集合メンバーの数を計算する
7
ZRANGE key start stop[WITHSCORES]は、インデックスによってメンバー範囲の秩序化されたセットを返します.
8
ZRANGEBYLEX key min max[LIMIT offset count]は、メンバー範囲の順序付き集合(辞書範囲)を返します.
9
ZRANGEBYSCORE key min max[WITHSCORES][LIMIT]は、メンバー範囲の順序付けされたセットをスコアで返します.
10
ZRANK key memberは、メンバーのインデックス内の順序付けされた集合を決定する
11
ZREM key member [member ...]1つ以上のメンバーを順序付きコレクションから削除
12
ZREMRANGEBYLEX key min max指定された辞書範囲内のすべてのメンバーの順序付き集合を削除
13
ZREMRANGEBYRANK key start stopは、指定されたインデックス内ですべてのメンバーの順序付きセットを削除します.
14
ZREMRANGEBYSCORE key min max指定されたスコア内ですべてのメンバーの順序付き集合を削除
15
ZREVRANGE key start stop[WITHSCORES]は、インデックスを介してスコアでソートされたメンバー範囲の秩序化された集合を返します.
16
ZREVRANGEBYSCORE key max min[WITHSCORES]は、上位から下位へのスコアでソートされたメンバー範囲の順序付き集合を返します.
17
ZREVRANK key memberは、高いスコアから低いスコアまで、順序付けされた集合メンバーのインデックスを決定します.
18
ZSCORE key memberは、所定のメンバーに関連付けられたスコアを1つの秩序化されたセットで取得する
19
ZUNIONSTORE destination numkeys key [key ...]複数のセット・ソートを追加し、得られたソート・セットを新しいキーに格納します.
20
ZSCAN key cursor[MATCH pattern][COUNT count]インクリメンタル反復ソート要素セットと関連するスコア
参照リンク:(http://www.yiibai.com/redis/redis_sorted_sets.html)
私たちが実現できること:
1.ランキング
ランキングは、収入ランキング、ポイントランキングなど、非常に一般的な実装です.場合によっては、ランキング全体を直接キャッシュし、タイミングタスクを設定して、ある時点で更新することができます.しかし、いくつかのリアルタイム性が比較的強い場合は、データをタイムリーに更新する必要があり、redisの秩序化キューを利用して実現することができ、原理は秩序化キューの関連スコアを利用することである.
PS:自分で実現するには、二叉スタックで実現することが考えられ、効率はO(log(N))
#             ,          ,           
> zadd rank 100 biki 87 zhibin 72 ming 64 fen 98 cat
(integer) 5
#            
> ZREVRANGE rank 0 2 WITHSCORES
1) "biki"
2) 100.0
3) "cat"
4) 98.0
5) "zhibin"
6) 87.0
#  aaa         90
>zadd rank 90 aaa
#       ,     
> zadd rank 90 aaa
(integer) 1
> ZREVRANGE rank 0 2 WITHSCORES
1) "biki"
2) 100.0
3) "cat"
4) 98.0
5) "aaa"
6) 90.0
ランキングが更新されました