redis zset


redisは、秩序化された集合、すなわちsorted setをサポートする.sorted setはsetに基づいて、ソート属性を追加し、setのアップグレード版です.ここではsorted setの一般的な関数について簡単に説明します.
1)insert
a)  zadd
構文:zadd key score member[[score member][score member]...]
解釈:1つ以上のメンバーを追加して、秩序セットkeyに「scoreに従ってソート」し、メンバーがすでに存在する場合はscoreのみを更新します.既存のメンバーを含まない追加メンバー数を返します.
[root@xsf001 ~]# redis-cli 
redis 127.0.0.1:6379> ZADD score 230 zhangsan
(integer) 1
redis 127.0.0.1:6379> zadd score 240 lisi 250 wangwu
(integer) 2
redis 127.0.0.1:6379> zadd score 100 liuli
redis 127.0.0.1:6379> zadd score 249 wangwu
(integer) 0

注意:一部のredisバージョンでは、一度に1つのmemberしか追加できません.
2)select
a)zrange
構文:zrange key start stop[withscores]
解釈:続編keyで指定された範囲【インデックスstart stopを介して】のmember[およびそのscore]を返す.
redis 127.0.0.1:6379> zrange score 0 -1  #    
1) "liuli"
2) "zhangsan"
3) "lisi"
4) "wangwu"
redis 127.0.0.1:6379> zrange score 0 -1 withscores  #  member score
1) "liuli"
2) "100"
3) "zhangsan"
4) "230"
5) "lisi"
6) "240"
7) "wangwu"
8) "249"
redis 127.0.0.1:6379> zrange score 0 2 withscores  #     
1) "liuli"
2) "100"
3) "zhangsan"
4) "230"
5) "lisi"
6) "240"
redis 127.0.0.1:6379> zrange score 0 -2  #      
1) "liuli"
2) "zhangsan"
3) "lisi"

注意:0は、最初の要素を表し、-1は最後の要素を表し、-2は最後から2番目の要素を表します.
b)zcount
構文:zcount key min max
説明:統計keyにおけるscore値がminとmaxの間のmember個数
redis 127.0.0.1:6379> zrange key 0 -1 withscores
1) "liuli"
2) "100"
3) "zhangsan"
4) "230"
5) "lisi"
6) "240"
7) "wangwu"
8) "249"
redis 127.0.0.1:6379> zcount key 230 240  # count(score >=230 && score <=240)
(integer) 2

c) zscore
構文:zscore key member
解釈:続編keyのメンバーがあるscoreを返す
redis 127.0.0.1:6379> zscore key liuli
"100"

d)zrevrange
構文:zrevrange key start stop[withscores]
解釈:続編keyで指定した範囲[インデックスstart stopで]のメンバー[およびscore]を返し、メンバーをscoreに従って降順に並べ替える

redis 127.0.0.1:6379> zrevrange kye 0 -1 withscores
1) "wangwu"
2) "249"
3) "lisi"
4) "240"
5) "zhangsan"
6) "230"
7) "liuli"
8) "100"
redis 127.0.0.1:6379> zrevrange score 1 -2
1) "lisi"
2) "zhangsan"

e)zrangebyscore
構文:zrangebyscore key min max[withscores][limit offset count]
解釈:続編keyに戻り、scoreはmin以上max以下のmemberより大きい.返される結果はscoreの増加順に並べられます.オプションwithscoresは、結果セットに戻ってメンバーのみを返すか、メンバーとscoreを返すかを決定します.オプションパラメータlimitは、結果を返す数の区間を指定します.
redis 127.0.0.1:6379> zrangebyscore score 100 10000 withscores
1) "liuli"
2) "100"
3) "zhangsan"
4) "230"
5) "lisi"
6) "240"
7) "wangwu"
8) "249"
redis 127.0.0.1:6379> zrangebyscore score 100 10000  limit 1 3
1) "zhangsan"
2) "lisi"
3) "wangwu"

f)zrevrangebyscore
構文:zrevrangescore key max min[withscores][limit offset count]
解釈:続編keyのscore<=maxおよびscore>=minの要素が返され、返された結果はscoreの大きい順から小さい順に並べられます.オプションパラメータwithscoresは、結果セットにscoreが含まれているかどうかを決定し、オプションパラメータlimitは結果セットを返す範囲を指定します.(逆説)
redis 127.0.0.1:6379> zrevrangebyscore score 0 10000
(empty list or set)
redis 127.0.0.1:6379> zrevrangebyscore score 10000 0
1) "wangwu"
2) "lisi"
3) "zhangsan"
4) "liuli"
redis 127.0.0.1:6379> zrevrangebyscore score 10000 0 withscores limit 0, 2
1) "wangwu"
2) "249"
3) "lisi"
4) "240"

注意:maxはminの前に
g)zrank
構文:zrankkey member
解釈:scoreに従って低いから高いまで、memberの続編のあるindexに戻ります
redis 127.0.0.1:6379> zrange score 0 -1
1) "liuli"
2) "zhangsan"
3) "lisi"
4) "wangwu"
redis 127.0.0.1:6379> zrank score liuli
(integer) 0
redis 127.0.0.1:6379> zrank score wangwu
(integer) 3

h)zrevrank
構文:zrevrank key member
解釈:scoreの高さから低へのソートに基づいて、秩序セットkeyにおけるmemberのindexを返します.
redis 127.0.0.1:6379> zrange score 0 -1
1) "liuli"
2) "zhangsan"
3) "lisi"
4) "wangwu"
redis 127.0.0.1:6379> zrevrank score liuli
(integer) 3
redis 127.0.0.1:6379> zrevrank score wangwu
(integer) 0

i)zcard
構文:zcard key
解釈:続編keyの基数(数または長さ)を返す
redis 127.0.0.1:6379> zcard score
(integer) 4
redis 127.0.0.1:6379> zcard stdu  #        0
(integer) 0

3)update
a)zincrby
構文:zincrby key increment member
解釈:続編keyのメンバーが増分incrementを増加し、増加後のscoreを返す
redis 127.0.0.1:6379> zscore score liuli
"100"
redis 127.0.0.1:6379> zincrby score 300 liuli
"400"
redis 127.0.0.1:6379> zscore score liuli
"400"
redis 127.0.0.1:6379>zincrby score 500 xie
"500"

注意:keyにメンバーが存在しない場合は、新しいメンバーが追加されます.
4)delete
a)zrem
構文:zrem key member[member...]
説明:続編の1つ以上のメンバーを削除し、メンバーを削除する数を返します.
redis 127.0.0.1:6379> zrange score 0 -1
1) "zhangsan"
2) "lisi"
3) "wangwu"
4) "liuli"
5) "xie"
redis 127.0.0.1:6379> zrem score xie wwww  #www   
(integer) 1
redis 127.0.0.1:6379> zrange score 0 -1
1) "zhangsan"
2) "lisi"
3) "wangwu"
4) "liuli"

注意:メンバーが存在しない場合は無視
b)zremrangebyrank
構文:zremrangebyrankkey start stop
説明:続編で指定したランキング範囲【start stop】の要素を除去し、除去要素の数を返します
redis 127.0.0.1:6379> zrange score 0 -1
1) "zhangsan"
2) "lisi"
3) "wangwu"
4) "liuli"
redis 127.0.0.1:6379> zremrangebyrank score 0 1
(integer) 2
redis 127.0.0.1:6379> zrange score 0 -1
1) "wangwu"
2) "liuli"

注:stopがstartの前にある場合は、0個削除します.
c)zremrangebyscore
構文:zremrangebyscore key min max
解釈:続編のメンバーを削除し、メンバーを削除するscoreはmin以上max以下である.除去要素の数を返します
redis 127.0.0.1:6379> zrange score 0 -1 withscores
1) "wangwu"
2) "249"
3) "liuli"
4) "400"
redis 127.0.0.1:6379> zremrangebyscore score 248 250
(integer) 1
redis 127.0.0.1:6379> zrange score 0 -1 withscores
1) "liuli"
2) "400"

5)その他
a)zinterstore
構文:zinterstore destination numkeys key[key...][weights weight] [aggregate sum|min|max]
説明:続編のある複数の交差を統計します.続編keyの数はnumkeysパラメータで指定し、統計結果をdestinationに格納する必要があります.デフォルトでは、destinationの要素のscoreは、続編keyの要素があるscoreの和です.Weightsを使用して、続編ごとに乗算係数を指定します.各続編のあるscoreは、集合関数(aggregate)に渡す前に乗算係数を乗算します.乗算係数weightが指定されていない場合は、デフォルトは1です.aggregateオプションを使用して、交差の集約方法を指定します.min,最小score,max,最大score,sum,和を求める.
redis 127.0.0.1:6379> zrange score 0 -1 withscores
1) "lisi"
2) "20"
3) "liuli"
4) "400"
redis 127.0.0.1:6379> zrange score1 0 -1 withscores
1) "wangwu"
2) "20"
3) "liuli"
4) "30"
redis 127.0.0.1:6379> zinterstore dest 2 score score1 #     sum(score.member.score * 1 + score1.member.score * 1)
(integer) 1
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "liuli"
2) "430"
redis 127.0.0.1:6379> zinterstore dest 2 score score1 weights 1 2 #    ,sum(score.member.score * 1 + score1.member.score * 2)
(integer) 1
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "liuli"
2) "460"
redis 127.0.0.1:6379> zinterstore dest 2 score score1 aggregate min #      ,min(score.member.score * 1 , score1.member.score * 1)
(integer) 1
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "liuli"
2) "30"
redis 127.0.0.1:6379> zinterstore dest 2 score score1 aggregate max #       max(score.member.score * 1 , score1.member.score * 1)
(integer) 1
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "liuli"
2) "400"
redis 127.0.0.1:6379> zinterstore dest 2 score score1 aggregate sum  #    ,sum(score.member.score * 1 , score1.member.score * 1)
(integer) 1
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "liuli"
2) "430"
redis 127.0.0.1:6379> zinterstore dest 2 score score1 weights 1 2 aggregate min #       min(score.member.score * 1 , score1.member.score * 2)
(integer) 1
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "liuli"
2) "60"

b)zunionstore
構文:zunionstore destination numkeys key[key...][weights weight] [aggregate sum|min|max]
説明:続編のある複数の並列セットを統計し、続編keyの数がnumkeysパラメータで指定され、統計結果をdestinationに格納する必要があります.デフォルトでは、destinationの要素のscoreは、続編keyの要素があるscoreの和です.Weightsは乗算係数を指定し、aggregateは集約方法を指定します.詳細はzinterstoreを参照してください.
redis 127.0.0.1:6379> zrange score 0 -1 withscores
1) "lisi"
2) "20"
3) "liuli"
4) "400"
redis 127.0.0.1:6379> zrange score1 0 -1 withscores
1) "wangwu"
2) "20"
3) "liuli"
4) "30"
redis 127.0.0.1:6379> zunionstore dest 2 score score1 #     sum(score.member.score * 1 , score1.member.score * 1)
(integer) 3
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "lisi"
2) "20"
3) "wangwu"
4) "20"
5) "liuli"
6) "430"
redis 127.0.0.1:6379> zunionstore dest 2 score score1  weights 1 2 aggregate sum #     sum(score.member.score * 1 , score1.member.score * 2)
(integer) 3
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "lisi"
2) "20"
3) "wangwu"
4) "40"
5) "liuli"
6) "460"
redis 127.0.0.1:6379> zunionstore dest 2 score score1  weights 1 2 aggregate max #      max(score.member.score * 1 , score1.member.score * 2)
(integer) 3
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "lisi"
2) "20"
3) "wangwu"
4) "40"
5) "liuli"
6) "400"
redis 127.0.0.1:6379> zunionstore dest 2 score score1  weights 2 4 aggregate min #      min(score.member.score * 2 , score1.member.score * 4)
(integer) 3
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "lisi"
2) "40"
3) "wangwu"
4) "80"
5) "liuli"
6) "120"

注意:sorted setのすべての関数は、次の方法で表示してください.
[root@xsf001 ~]# redis-cli 
redis 127.0.0.1:6379> help @sorted_set