文章目录
Redis基本类型之SortedSet类型
一、概述
1、简介
Redis的SortedSet是一个可排序的set集合,与Java中TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加hash表。
2、特性
- 无序
- 可排序
- 元素不重复
- 查询速度快
- 下标索引 0 开始
因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。
二、SortedSet类型的常见命令
命令 | 作用 |
---|---|
zadd | 添加一个或多个元素到 sorted set,如果已经存在则更新其score值 |
zrem | 删除sorted set中的一个指定元素 |
zscore | 获取sorted set中的指定元素的score值 |
zrank | 获取sorted set中的指定元素的value |
zrevrank | 获取sorted set中的指定元素的排名 |
zcard | 获取sorted set中的元素个数 |
zcount | 统计score值在给定范围内的所有元素的个数 |
zincrby | 让sorted set中的指定元素自增,步长为指定的increment值 |
zrevrange | 按照score排序后,获取指定排名范围内的元素,前几名 |
zrange | 按照score排序后,获取指定排名范围内的元素,后几名 |
zrangebyscore | 按照score排序后,获取指定score范围的元素 |
zdiff、zinter、zunion | 求差集、交集、并集 |
注意:所有的排名默认都是升序,如果要降序则在命令的最后面添加 REV 即可
三、操作案例
1、添加学生(zadd)
- zadd:添加一个或多个元素到 sorted set,如果已经存在则更新其score值
- Jack 85,Lucy 89,Rose 82,Tom 95,Jerry 78,Amy 92,Miles 76
192.168.8.137:6379> ZADD stus 85 Jack 89 Lucy 82 Rose 95 Tom 78 Jerry 92 Amy 76 Miles
(integer) 7
2、删除Tom同学(zrem)
- zrem:删除sorted set中的一个指定元素
192.168.8.137:6379> ZREM stus Tom
(integer) 1
3、获取Amy同学的分数(zscore)
- zscore:获取sorted set中的指定元素的score值
192.168.8.137:6379> ZSCORE stus Amy
"92"
4、获取Rose同学的value(zrank)
- zrank:获取sorted set中的指定元素的value
192.168.8.137:6379> ZRANK stus Rose
(integer) 2
5、获取Amy同学的排名(zrevrank)
- zrevrank:获取sorted set中的指定元素的排名
192.168.8.137:6379> ZREVRANK stus Amy
(integer) 0
6、获取同学个数(zcard)
- zcard:获取sorted set中的元素个数
192.168.8.137:6379> ZCARD stus
(integer) 6
7、查询80分以下有几个学生(zcount)
- zcount:统计score值在给定范围内的所有元素的个数
192.168.8.137:6379> ZCOUNT stus 0 80
(integer) 2
8、给Amy同学加2分(zincrby)
- zincrby:让sorted set中的指定元素自增,步长为指定的increment值
192.168.8.137:6379> ZINCRBY stus 2 Amy
"94"
9、查出成绩前3名的同学(zrevrange)
- zrevrange:按照score排序后,获取指定排名范围内的元素,前几名
192.168.8.137:6379> ZREVRANGE stus 0 2
1) "Amy"
2) "Lucy"
3) "Jack"
10、查出成绩后3名的同学(zrange)
- zrange:按照score排序后,获取指定排名范围内的元素,后几名
192.168.8.137:6379> ZRANGE stus 0 2
1) "Miles"
2) "Jerry"
3) "Rose"
11、查出成绩80分以下的所有同学(zrangebyscore)
- zrangebyscore:按照score排序后,获取指定score范围的元素
192.168.8.137:6379> ZRANGEBYSCORE stus 0 80
1) "Miles"
2) "Jerry"