1、ZSet 概念 (sorted set)
(1)Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的没有成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。
(2)因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表
2、ZSet 基本命令
(1)将一个或多个 member 元素及其 score 值加入到有序集 key 当中
zadd <key> <score1> <value1> <score2> <value2>...
127.0.0.1:6379> zadd z1 100 v1 300 v2 200 v3 150 v4
(integer) 4
(2)返回有序集 key 中,下标在<start> <stop>之间的元素
带WITHSCORES,可以让分数一起和值返回到结果集。
zrange <key> <start> <stop> [WITHSCORES]
从小到大
127.0.0.1:6379> zrange z1 0 -1
1) "v1"
2) "v4"
3) "v3"
4) "v2"
注:0到-1 是展示全部数据
从小到大(分+值)
127.0.0.1:6379> zrange z1 0 -1 withscores
1) "v1"
2) "100"
3) "v4"
4) "150"
5) "v3"
6) "200"
7) "v2"
8) "300"
从大到小(rev)
127.0.0.1:6379> zrevrange z1 0 -1
1) "v2"
2) "v3"
3) "v4"
4) "v1"
127.0.0.1:6379> zrange z1 0 -1
1) "v1"
2) "v4"
3) "v3"
4) "v2"
(3)返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。
有序集成员按 score 值递增(从小到大)次序排列。
zrangebyscore key min max [withscores] [limit offset count]
127.0.0.1:6379> zrangebyscore z1 150 300
1) "v4"
2) "v3"
3) "v2"
(4)同上,改为从大到小排列。
zrevrangebyscore key max min [withscores] [limit offset count]
127.0.0.1:6379> zrevrangebyscore z1 300 150
1) "v2"
2) "v3"
3) "v4"
(5)为元素的score加上增量
zincrby <key> <increment> <value>
127.0.0.1:6379> zrange z1 0 -1 withscores
1) "v1"
2) "100"
3) "v4"
4) "150"
5) "v3"
6) "200"
7) "v2"
8) "300"
127.0.0.1:6379> zincrby z1 200 v2
"500"
(6)删除该集合下,指定值的元素
zrem <key> <value>
127.0.0.1:6379> zrange z1 0 -1
1) "v1"
2) "v4"
3) "v3"
4) "v2"
127.0.0.1:6379> zrem z1 v1
(integer) 1
127.0.0.1:6379> zrange zi1 0 -1
1) "v4"
2) "v3"
3) "v2"
(7)统计该集合,分数区间内的元素个数
zcount <key> <min> <max>
127.0.0.1:6379> zcount zi 0 10000
(integer) 3
(8)返回该值在集合中的排名,从0开始。
zrank <key> <value>
正序
127.0.0.1:6379> zrank zi v2
(integer) 2
倒叙
127.0.0.1:6379> zrevrank zi v2
(integer) 0