Redis ZSet 有序集合 详解 + 应用场景
一、ZSet 是什么
ZSet = Sorted Set 有序集合 底层:跳表 + 哈希表
核心三大特点:
- 元素唯一(和 Set 一样,不能重复)
- 每个元素带一个 score 分数
- 按 score 自动从小到大排序
结构:key → member成员 → score分数
二、和其他类型区别
- Set:无序、唯一
- ZSet:有序、唯一、带分数排序
三、常用基础命令
redis
# 添加成员 分数+成员
zadd rank 100 张三 90 李四 85 王五
# 从小到大查全部
zrange rank 0 -1 withscores
# 从大到小查
zrevrange rank 0 -1 withscores
# 增加分数
zincrby rank 5 张三
# 删除成员
zrem rank 李四
# 获取个数
zcard rank
四、ZSet 经典应用场景
1. 各种排行榜(最核心)
- 直播间贡献榜
- 文章点赞排行榜
- 学生成绩排名
- 游戏战力排行榜
原理:把用户 ID / 文章 ID 当 member,点赞数 / 分数当 score,Redis 自动帮你排序。
2. 延时队列 / 定时任务
思路:
- member:任务 ID
- score:时间戳 后台程序轮询拿最小时间戳的任务,到点就执行。
3. 带权重的共同好友、智能推荐
配合 zinterstore
- 求多个人共同好友
- 按亲密值、互动分做分数加权,重新排序推荐好友
4. 限流、全局排名、实时榜单
实时更新分数,排行榜秒刷新,不用数据库排序,性能爆炸。
5. 新闻 / 帖子 按时间排序
把发布时间戳当 score,新内容分数大,倒序取出就是最新发布列表。
6. 热搜排行榜
搜索一次给关键词 score +1,自动实时排行,做热搜榜单完美适配。
五、底层简单一句话
ZSet 底层用跳表 实现,插入、删除、排序都是 O(logn) ,既能保证元素唯一 ,又能自动按分数排序 ,专门用来做各种排行榜、延时队列、加权交集排序。
六、总结
Redis ZSet 是有序唯一集合 ,自带 score 分数自动排序;适用场景:各类排行榜、延时队列、热搜榜、时间线排序、带权重共同好友与智能推荐。