高并发实时排行榜如何设计
面试题简述
我们有一个玩家战力排行榜,战力实时变化,访问量巨大。
我们想知道两件事:
1、当前的 Top 100的战力是多少?
2、某玩家的战力大概排在第几?
在高并发、高波动情况下,你会怎样设计这个系统?怎么保证高可用和高QPS?
面试官想听到的
1、明白排行榜查询 = 有序结构查询;
2、能讲 Redis Sorted Set 的方案;
3、能讲高QPS场景下的分片、缓存、异步等。
4、能讲清 Top 100 和个人排名两类查询的差异。
面试回答举例
排行榜本质上是一个有序集合问题,最合适的结构是Redis Sorted Set。
Redis Zset天然支持:
1、ZRANGE 0 99:拿 Top 100;
2、ZREVRANK player_id:拿个人排名
3、ZSCORE player_id:拿玩家战力。
QPS大、变化快的痛点是两个:
1、战力变化频繁 -> 写入频繁
2、排行计算复杂 -> 读 QPS 巨大
所以我会这样设计:
第一层:Redis Sorted Set缓存排行榜
第二层:主从 Redis 或 Redis Cluster 分担高 QPS
第三层:写入异步化,避免 Redis 过于频繁
第四层:Top 100 做本地缓存 + 异步刷新
第五层:高可用层设计
详细内容可跳转该链接查看详情:http://xhslink.com/o/34N3Fry5EuB
由浅入深分析
1、排行榜天然适合 Redis ZSet;
2、Top 100 是极致高频且变化较小 -> 天然缓存。
3、排行查询依赖 ZSET 的rank特性。
4、真正的压力是写战力变化。
5、实时性与成本成反比,需要控制刷新频率。
面试加分点
1、提到滑动窗口稀疏更新。
2、提到冷热榜切分。
3、提到 Redis ZSet 基于跳表。
4、提到排行榜分页难点。
#面试##实习##春招##面经#带你复盘2025年大厂系统设计面试题,手把手教你从入门到精通!
查看24道真题和解析
