首页/数据/数据库速查/排行榜运营细节(同分、分页、周期榜)
Redis 运维与场景124 条

排行榜运营细节(同分、分页、周期榜)

ZSet 做排行榜的实战要点:同分顺序由 member 字典序决定、分页用 ZREVRANGE 区间、周期榜按 key 生成或用 ZUNIONSTORE 合并。

数据库速查数据更新于 2026-10-12

常用操作

常用操作
ZADD lb:d 100 u1 100 u2 90 u3
ZREVRANGE lb:d 0 2 WITHSCORES      # 前三名
ZREVRANK lb:d u3                   # 排名(0 起;从高到低用 ZREVRANK)
ZSCORE lb:d u1
ZREVRANGE lb:d 50 60 WITHSCORES    # 第 51-61 名(分页)
# 周榜 = 7 天日榜求和(权重 1)
ZUNIONSTORE lb:week 2 lb:1012 lb:1013 WEIGHTS 1 1 AGGREGATE SUM
EXPIRE lb:week 604800
同分并列分数相同按 member 字典序;要「先到先得」把时间编进分数
分数编码score = 业务分 * 10^10 + (MAX_TS - 完成时间)
周期榜日/周键 + TTL 自动清理,或定时 ZUNIONSTORE
大榜不要全量 ZRANGE 拉取,按页/按段取
「我在第几名」类需求:ZREVRANK 是 O(log N),随查随算即可;千万级榜单要注意单 key 容量与热点。

易错点

  • 用 ZRANGE 做从高到低:顺序相反,得用 ZREVRANGE(或 ZRANGE ... REV)
  • 分数用浮点直接编时间戳:精度丢失导致排序错乱,用整数倍放大

数据来源与参考

  • Redis 官方文档: ZRANK
  • Redis 官方文档: ZUNIONSTORE

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌