Redis SortedSet类型操作与使用场景
一、SortedSet类型操作
SortedSet的常见命令有:
ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
# 添加多个sorted
127.0.0.1:6379> zadd english:scores 85 zh 82 w 79 t 90 l
4
ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
# -1表示最后一位
127.0.0.1:6379> zrange english:scores 0 -1
t
w
zh
l
ZREM key member:删除sorted set中的一个指定元素
# 删除元素
127.0.0.1:6379> zrem english:scores zh
1
ZSCORE key member : 获取sorted set中的指定元素的score值
# 获取值
127.0.0.1:6379> zscore english:scores l
90
ZRANK key member:获取sorted set 中的指定元素的排名
# 获取排名
127.0.0.1:6379> zrank english:scores l
2
ZCARD key:获取sorted set中的元素个数
# 统计元素个数
127.0.0.1:6379> zcard english:scores
3
ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
# 统计范围内元素个数
127.0.0.1:6379> zcount english:scores 85 90
2
ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
# 元素自增
127.0.0.1:6379> zincrby english:scores 5 w
87
ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
# 排序后范围内元素
127.0.0.1:6379> zrangebyscore english:scores 80 90
w
l
ZDIFF、ZINTER、ZUNION:求差集、交集、并集
# 添加多个sorted
127.0.0.1:6379> zadd math:scores 85 zh 82 w 79 t 90 l
4
# 差集
127.0.0.1:6379> zdiff 2 math:scores english:scores
zh
# 交集
127.0.0.1:6379> zinter 2 math:scores student:scores withscores
t
158
w
169
l
180
# 并集
127.0.0.1:6379> zunion 2 math:scores english:scores
zh
t
w
l
注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:
升序:获取sorted set 中的指定元素的排名:ZRANK key member
# 升序排名
127.0.0.1:6379> zrank english:scores l
3
降序:获取sorted set 中的指定元素的排名:ZREVRANK key memeber
# 降序排名
127.0.0.1:6379> zrevrank english:scores zh
1
二、使用场景
Sorted Set在Redis中主要用于存储带有排序功能的数据集合,以下是几个典型的使用场景:
排行榜系统:
Sorted Set可以按照元素的分数进行排序,因此非常适合用于实现各种排行榜系统。例如,游戏排名、销售额排名等。
按照分数范围获取元素:
Sorted Set支持按照分数范围来获取元素,因此可以用于实现按照价格区间来筛选商品、按照评分区间来筛选电影等功能。
带权重的任务队列:
Sorted Set可以按照元素的分数进行排序,因此可以用于实现带权重的任务队列。例如,一些重要的任务可以设置较高的分数,让队列优先处理这些任务。
定时任务:
Sorted Set中的元素可以设置一个过期时间,因此可以用于实现定时任务。例如,在指定的时间自动执行某些操作。
日志按级别存储:
可以使用Sorted Set存储日志信息,将日志级别作为分数,这样可以方便地按级别查询和统计日志信息。
分布式锁:
Sorted Set可以用于实现分布式锁,将锁的过期时间作为分数,这样可以避免死锁的发生。
社交功能中的“附近的人”:在社交类应用中,“附近的人”是一个常见的功能,需要计算用户之间的距离并进行排序。Sorted Set可以按照地理位置的分数进行排序,因此可以用于实现这个功能。
实时统计在线人数:
Sorted Set可以按照用户的最后活跃时间作为分数,这样可以方便地统计当前在线人数和最近活跃用户列表。