高并发实时排行榜如何设计

面试题简述

我们有一个玩家战力排行榜,战力实时变化,访问量巨大。

我们想知道两件事:

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系统设计复盘 文章被收录于专栏

带你复盘2025年大厂系统设计面试题,手把手教你从入门到精通!

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务