redis学习(6)—操作zset类型命令

1、什么是zset数据类型
zset是set的一个升级版本,它在set的基础上增加了一个顺序操作。
它和set一样,zset也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的score。
zset集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。
zset集合中最大的成员数为2的(32 – 1)次方(4294967295),每个集合可存储40多亿个成员。
zset最经典的应用场景就是排行榜。

2、ZADD命令
将一个或多个member元素及其score值加入到有序集合key当中
语法:ZADD key score member [[score member] [score member] …]
例子:
案例1:创业公司招进了4个员工,分别为:alex工资2000,tom工资5000,jack工资6000,agan工资1000,请按工资升序排序
zadd salary 2000 alex 5000 tom 6000 jack 1000 agan
(integer) 4

3、ZRANGE命令
返回有序集合key中,指定区域内的成员
语法:ZRANGE key start stop [WITHSCORES]
说明:
下标参数start和stop都以0为底,也就是说,以0表示有序集第一个成员,以1表示有序集第二个成员,以此类推。
你也可以使用负数下标,以-1表示最后一个成员,-2表示倒数第二个成员,以此类推。
例子:
zrange salary 0 -1 withscores
1) “agan”
2) “1000”
3) “alex”
4) “2000”
5) “tom”
6) “5000”
7) “jack”
8) “6000”

4、ZREM命令
移除有序集合key中的一个或多个成员,不存在的成员将被忽略
语法:ZREM key member [member …]
例子:
案例2:tom离职了
zrem salary tom
(integer) 1
zrange salary 0 -1 withscores
1) “agan”
2) “1000”
3) “alex”
4) “2000”
5) “jack”
6) “6000”

5、ZCARD命令
返回有序集合key的基数
语法:ZCARD key
例子:
案例3:创业公司有多少人
zcard salary
(integer) 3

6、ZCOUNT命令
返回有序集合key中,score值在min和max之间(默认包括score值等于min或max)的成员
语法:ZCOUNT key min max
例子:
案例4:创业公司老板问你,工资在2000至6000之间有多少人
zrange salary 0 -1 withscores
1) “agan”
2) “1000”
3) “alex”
4) “2000”
5) “jack”
6) “6000”
zcount salary 2000 6000
(integer) 2

7、ZSCORE命令
返回有序集合key中,成员member的score值
语法:ZSCORE key member
例子:
案例5:创业公司老板问你,agan的工资是多少?
zscore salary agan
“1000”

8、ZINCRBY命令
为有序集合key的成员member的score值加上增量increment
语法:ZINCRBY key increment member
例子:
案例6:创业公司老板说agan表现很好,给他加500元吧
zincrby salary 500 agan
“1500”
zrange salary 0 -1 withscores
1) “agan”
2) “1500”
3) “alex”
4) “2000”
5) “jack”
6) “6000”

9、ZREVRANGE命令
返回有序集合key中,指定区间内的成员,按照降序排列
语法:ZREVRANGE key start stop [WITHSCORES]
例子:
案例7:创业公司老板说经济不好,成本太大,看工资最多的是哪些人?
zrevrange salary 0 -1 withscores
1) “jack”
2) “6000”
3) “alex”
4) “2000”
5) “agan”
6) “1500”

10、ZRANGEBYSCORE命令
返回有序集合key中,所有score值介于min和max之间(包括等于min和max)的成员。有序集合成员按照score值递增(从小到大)次序排序
取某个score的member,可以用于分页查询,offset count表示从第几个偏移量开始取几个元素
命令:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
例子:
案例8:创业公司老板要给工资低的人加薪水,老板要求先看低于5000元的有哪些人?人多的话分页查
zrangebyscore salary 1 5000
1) “agan”
2) “alex”
zrangebyscore salary 1 5000 LIMIT 0 1
1) “agan”
zrangebyscore salary 1 5000 LIMIT 1 2
1) “alex”

11、ZREVRANGEBYSCORE命令
返回有序集合key中,所有score值介于max和min之间(包括等于max和min)的所有成员。有序集合成员按照score值递减(从大到小)次序排列
和上面的功能一样,但是这次是降序的
命令:ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
例子:

12、ZRANK命令
取某个member的排名,按照升序排列
命令:ZRANK key member
例子:
案例9:创业公司老板要查,工资从低到高,查某个员工排第几名?
zrevrange salary 0 -1 withscores
1) “jack”
2) “6000”
3) “alex”
4) “2000”
5) “agan”
6) “1500”
zrank salary agan
(integer) 0

13、ZREVRANK命令
取某个member的排名,按照降序排列
命令:ZREVRANK key member
例子:

14、ZREMRANGEBYRANK命令
移除指定排名(rank)区间内的所有成员
命令:ZREMRANGEBYRANK key start stop
例子:
案例10:经济不好,老板要裁员了,把工资最低的2个人裁掉
zrange salary 0 -1 withscores
1) “agan”
2) “1500”
3) “alex”
4) “2000”
5) “jack”
6) “6000”
zremrangebyrank salary 0 1
(integer) 2
zrange salary 0 -1 withscores
1) “jack”
2) “6000”

15、ZREMRANGEBYSCORE命令
移除指定score值介于min和max之间(包括min或max)的成员
语法:ZREMRANGEBYSCORE key min max
例子:
案例11:经济不好,老板要裁员了,把工资1000至2000之间的人裁掉
zrange salary 0 -1 withscores
1) “agan”
2) “1000”
3) “alex”
4) “2000”
5) “tom”
6) “5000”
7) “jack”
8) “6000”
zremrangebyscore salary 1000 2000
(integer) 2
zrange salary 0 -1 withscores
1) “tom”
2) “5000”
3) “jack”
4) “6000”

16、ZINTERSTORE命令
求交集
计算给定的一个或多个有序集合的交集,其中给定key的数量必须以numkeys参数指定,并将该交集(结果集)存储到destination
numkeys表示后面有多少个key
语法:ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
例子:
zadd group11 10 a 20 b 30 c
(integer) 3
zadd group21 10 x 20 y 30 z 20 c
(integer) 4
zinterstore group31 2 group11 group21
(integer) 1
zrange group31 0 -1 withscores
1) “c”
2) “50”
这里交集是把相同member的score加在了一起

17、ZUNIONSTORE命令
求并集
计算给定的一个或多个有序集合的并集,其中给定key的数量必须以numkeys参数指定,并将该并集(结果集)存储到destination
语法:ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
例子:
zunionstore group41 2 group11 group21
(integer) 6
zrange group41 0 -1 withscores
1) “a”
2) “10”
3) “x”
4) “10”
5) “b”
6) “20”
7) “y”
8) “20”
9) “z”
10) “30”
11) “c”
12) “50”
并集也会把相同member的score加在一起