1. SortedSet集合介绍
SortedSet集合与Set集合类似,有以下特点:
- 数据是有序的,无重复的
- 每一个元素都关联着一个浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。分值可以相同,此时按照元素的字典序排序
- 元素是字符串类型
- 最多包含232-1个元素
2. SortedSet指令
2.1 增加一个或多个元素
zadd key score member [score member ...]
127.0.0.1:6379> zadd letters 10 a
1
127.0.0.1:6379> zadd letters 9 b 8 c 7.1 d 6.5 e 6.4 f 6.3 g
6
127.0.0.1:6379> zadd letters 6.2 g
0
127.0.0.1:6379>
2.2 返回集合中元素个数
zcard key
-
zcount key min max
查询指定分值内元素个数
127.0.0.1:6379> zcard letters
5
127.0.0.1:6379> zcount letters 7 9
3
127.0.0.1:6379>
2.3 查询指定索引区间元素
zrange key start stop
start和stop是按照score从小到大,如果score相同,则按照字典序
带着 withscores 会显示分值
zrevrange key start stop
按照score从大到小排列
127.0.0.1:6379> zrange letters 0 -1
g
f
e
d
c
b
a
127.0.0.1:6379> zrevrange letters 0 -1
a
b
c
d
e
f
g
127.0.0.1:6379> zrange letters 2 4
e
d
c
127.0.0.1:6379>
2.4 移除一个或者多个元素
zrem key member [member ...]
元素不存在,自动忽略
127.0.0.1:6379> zrem letters g
1
127.0.0.1:6379> zrange letters 0 -1
f
e
d
c
b
a
127.0.0.1:6379> zrem letters f g
1
127.0.0.1:6379> zrange letters 0 -1
e
d
c
b
a
127.0.0.1:6379>
2.5 显示分值
zscore key member
127.0.0.1:6379> zscore letters c
8
127.0.0.1:6379>
注意:计算机并不能精确表达每一个浮点数,都是一种近似表达,所以有时候会显示出好多位小数
2.6 增加或者减少分值
zincrby key increment member
increment为正数就是增加,为负数就是减少,可以用浮点型
127.0.0.1:6379> zincrby letters 1.8 c
9.8000000000000007
127.0.0.1:6379> zscore letters c
9.8000000000000007
127.0.0.1:6379> zincrby letters -5.6 c
4.2000000000000011
127.0.0.1:6379> zscore letters c
4.2000000000000011
127.0.0.1:6379>
2.7 返回元素的排名(索引)
zrank key member
升序的排名
zrevrank key member
降序的排名
127.0.0.1:6379> zrank letters c
0
127.0.0.1:6379> zrevrank letters c
4
127.0.0.1:6379>
2.8 返回指定分值区间元素
-
zrankbyscore key min max [WITHSCORES] [LIMIT offset count]
类似于mysql的语法,开区间使用左小括号(
,-inf和+inf表示负无穷和正无穷 zrevrankbyscore key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> zrangebyscore letters 6 10
e
d
b
a
127.0.0.1:6379> zrangebyscore letters (7.1 10
b
a
127.0.0.1:6379> zrangebyscore letters (7.1 (10
b
127.0.0.1:6379> zrangebyscore letters -inf +inf
c
e
d
b
a
127.0.0.1:6379> zrangebyscore letters -inf +inf limit 1 3
e
d
b
127.0.0.1:6379>
2.9 条件移除
- 移除指定排名范围的元素
zremrangebyrank key start stop
- 移除指定分值范围的元素
zremrangebyscore key min max
127.0.0.1:6379> zremrangebyrank letters 0 1
2
127.0.0.1:6379> zcard letters
3
127.0.0.1:6379> zremrangebyscore letters 9.5 10.5
1
127.0.0.1:6379> zcard letters
2
127.0.0.1:6379> zrange letters 0 -1
d
b
127.0.0.1:6379>
2.10 并集
zunionstore destination numkeys key [key ...] [weights weight] [aggregate SUM|MIN|MAX]
numkeys指定key的数量,必须写,几个key合并就是几
weights选项,与前面设定的key对应,对应key中每一个score都要乘以这个权重
aggregate选项,指定并集结果的聚合方式
- SUM:将所有集合中相同元素的score值之和作为结果集中该成员的score值,默认是这种方式
- MIN:将所有集合中相同元素的score值中最小值作为结果集中该成员的score值
- MAX:将所有集合中相同元素的score值中最大值作为结果集中该成员的score值
127.0.0.1:6379> zadd t1 90 a 80 b 70 c
3
127.0.0.1:6379> zadd t2 85 c 75 d 65 e 55 f
4
127.0.0.1:6379> zunionstore t3 2 t1 t2
6
127.0.0.1:6379> zrange t3 0 1000 withscores
f
55
e
65
d
75
b
80
a
90
c
155
127.0.0.1:6379> zunionstore t4 2 t1 t2 aggregate max
6
127.0.0.1:6379> zrange t4 0 100 withscores
f
55
e
65
d
75
b
80
c
85
a
90
127.0.0.1:6379>
2.11 交集
zinterstore destination numkeys key [key ...] [weights weight] [aggregate SUM|MIN|MAX]
127.0.0.1:6379> zinterstore t5 2 t1 t2 aggregate max
1
127.0.0.1:6379> zrange t5 0 100 withscores
c
85
127.0.0.1:6379>
3. SortedSet集合用处
因SortedSet集合是有序的,因此可以统计一些排名的。例如:云音乐的音乐排行榜、每天的笔记(以时间戳作为score)、热门消息、图书畅销榜等
网友评论