← 返回首页
Redis数据类型之SortedSet
发表时间:2023-11-10 02:46:58
Redis数据类型之SortedSet

Redis数据类型之SortedSet

1.Redis的SortedSet类型

SortedSet是有序集合,在集合类型的基础上为集合中的每个元素都关联了一个分数,根据分数进行排序,这样就实现了有序。

SortedSet比较适合用在获取TopN的场景,因为它里面的数据是有序的。

SortedSet类型常见的操作命令如下:

案例:

向集合中添加元素 zadd,查询集合中指定元素的分值 zscore。

127.0.0.1:6379> zadd zset1 5 a 3 b 4 c
(integer) 3
127.0.0.1:6379> zscore zset1 a 
"5"
127.0.0.1:6379> zscore zset1 b
"3"
127.0.0.1:6379> zscore zset1 c
"4"

根据角标获取集合中的元素(按照正序) zrange

127.0.0.1:6379> zrange zset1 0 -1
1) "b"
2) "c"
3) "a"

根据角标获取集合中的元素(按照倒序) zrevrange

127.0.0.1:6379> zrevrange zset1 0 -1
1) "a"
2) "c"
3) "b"

对集合中元素的分值进行递增 zincrby

127.0.0.1:6379> zincrby zset1 3 a
"8"
127.0.0.1:6379> zscore zset1 a
"8"

获取集合中元素的个数 zcard

127.0.0.1:6379> zcard zset1
(integer) 3

删除集合中的元素 zrem

127.0.0.1:6379> zrem zset1 c
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1
1) "b"
2) "a"

注意: 1. +inf(正无穷) -inf(负无穷),在给集合中的元素设置分值的时候可以使用这两个特殊数值。 2. set命令:如果key持有其它类型值,set会覆盖旧值,无视类型。

2.案例:存储高一班的学员信息

需求:将学员的姓名、年龄、性别、住址信息保存到Redis中。

分析如下:

在这里我们可以把学生认为是一个对象,学生对象具备了多个属性信息,姓名,年龄,性别,住址等信息。 所以针对学生信息非常适合使用hash类型进行存储,我们可以给学生生成一个编号拼接到key里面,姓名、年龄、性别、住址信息存储到hash类型的value中。

注意:这里面针对key的命名,stu是student的简写,尽量不要写太多字符,否则会额外占用内存空间的,后面的:1,表示这个学生的编号是1,后期如果我们想获取所有学员的key,就可以使用这个规则进行过滤了。

127.0.0.1:6379> hmset stu:1 name zhangsan gender male age 18 address xian
OK
127.0.0.1:6379> hgetall stu:1
1) "name"
2) "zhangsan"
3) "gender"
4) "male"
5) "age"
6) "18"
7) "address"
8) "xian"