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会覆盖旧值,无视类型。
需求:将学员的姓名、年龄、性别、住址信息保存到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"