引言
sort set是元素带有score,并且按score排序的有序集合
zset的命令中往往是对于三个维度去操作:score,按score排序后的下标,score相同情况下的元素字典排序后的值
这三个维度的命令的格式往往分别是:byscore、byrank、bylex
一共有以下命令需要熟悉,任务有点艰巨哦
BZPOPMAX
BZPOPMIN
ZADD
ZCARD
ZCOUNT
ZINCRBY
ZINTERSTORE
ZLEXCOUNT
ZPOPMAX
ZPOPMIN
ZRANGE
ZRANGEBYLEX
ZRANGEBYSCORE
ZRANK
ZREM
ZREMRANGEBYLEX
ZREMRANGEBYRANK
ZREMRANGEBYSCORE
ZREVRANGE
ZREVRANGEBYLEX
ZREVRANGEBYSCORE
ZREVRANK
ZSCAN
ZSCORE
ZUNIONSTORE
挨个介绍
向zset添加元素
sadd key [nx | xx] [ch] [incre] score member [score member]
- nx 只有元素不存在才会添加
- xx 只有元素存在才会更新score
- ch 看不懂
- incr 有这个选项就表示要增加member的score
获取zset的元素总数
zcard key
求得分数在min和max之间的元素个数。 统计值包括等于min和max值score的元素
zcount key min max
对一个member值的score增加increment
zincrby key increment member
获取分数最大的元素
zpopmax key
获取分数最小的元素
zpopmin key
对多个zset集合求并集把结果存储到destination集合中。 numkeys是为了只要有几个key,与后面的weight参数作为区分。
weight参数可以给每个集合指定一个乘法因子,score值在传递给聚合函数之前都要先乘以该因子。
sum、min、max是聚合函数,相同元素之间的聚合方法。
zunionstore destination numkeys key[key ...] [weight weight] [sum|min|max]
演示
redis> ZADD zset1 1 "one"
(integer) 1
redis> ZADD zset1 2 "two"
(integer) 1
redis> ZADD zset2 1 "one"
(integer) 1
redis> ZADD zset2 2 "two"
(integer) 1
redis> ZADD zset2 3 "three"
(integer) 1
redis> ZUNIONSTORE out 2 zset1 zset2 WEIGHTS 2 3
(integer) 3
redis> ZRANGE out 0 -1 WITHSCORES
1) "one"
2) "5"
3) "three"
4) "9"
5) "two"
6) "10"
redis>
对多个zset集合求交集把结果存储到destination集合中。其他参数与zunionstore命令的一样
zinterstore destination numkeys key[key …] [weight weight] [sum|min|max]
用来计算zset集合中指定成员之间的成员数量
zlenxcount key min max
计算成员之间成员数量
redis> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
redis> ZADD myzset 0 f 0 g
(integer) 2
redis> ZLEXCOUNT myzset - +
(integer) 7
redis> ZLEXCOUNT myzset [b [f
(integer) 5
redis>
计算某个成员之前或者之后的成员数量
redis> ZADD myzset 1 a 2 b 3 c 4 d 5 e 6 f 7 g
(integer) 7
redis> zrange myzset 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "g"
redis> ZLEXCOUNT myzset - +
(integer) 7
redis> ZLEXCOUNT myzset [c +
(integer) 5
redis> ZLEXCOUNT myzset - [c
(integer) 3
redis>
获取元素的score值
zscore key member
移除多个元素
zrem key member [member]
获取member元素的排名,从小到大,第一名是0
zrank key member
与zrank的排序方式相反,从大到小
zrevrank key member
复合命令
zrange
与其他命令类似,获取[start stop]范围内的元素
withscores会返回元素和元素的分数
zrange key start stop [withscores]
zrangebylex
获取成员之间的成员,按成员字典正序排序,分数必须相同。
limit offset count是用来分页查询的
[表示闭区间
(表示开区间
-表示最小
+表示最大
zrangebylex key min max [limit offset count]
redis> zadd zset 0 a 0 aa 0 abc 0 apple 0 b 0 c 0 d 0 d1 0 dd 0 dobble 0 z 0 z1
(integer) 12
redis> ZRANGEBYLEX zset [aa [c
1) "aa"
2) "abc"
3) "apple"
4) "b"
5) "c"
zrangebyscore
获取指定分数之间的成功,闭区间。
zrangebyscore key start stop [withscores] [limit offset count]
默认分数都是闭区间 可以在分数前加(表示开区间
+inf 和-inf表示返回所有
WITHSCORES和分页参数与之前类似
redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZRANGEBYSCORE myzset -inf +inf
1) "one"
2) "two"
3) "three"
redis> ZRANGEBYSCORE myzset 1 2
1) "one"
2) "two"
redis> ZRANGEBYSCORE myzset (1 2
1) "two"
redis> ZRANGEBYSCORE myzset (1 (2
(empty list or set)
redis>
zremrangebylex
删除指定成员之间的成员
[表示闭区间
(表示开区间
-表示最小
+表示最大
zremrangebylex key min max
zremrangebyrank
删除指定排名区间的元素
zremrangebyrank key start stop
zremangebyscore
删除指定分数之间的元素
zrevrange
按score值递减排序,获取指定排序范围内的元素
zrevrange key start stop [withscores]
zrevrangebylex
score相同情况下的元素字典逆序排序后的值范围
返回范围内的元素
zrevrangebylex key max min [LIMIT offset count]
zrevrangebyscore
sscore逆序排序后的范围
返回范围内的元素
zrevrangebyscore key max min [LIMIT offset count]
zscan
与scan类似
增量式的遍历zset内的值