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

面试题简述

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

我们想知道两件事:

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年大厂系统设计面试题,手把手教你从入门到精通!

全部评论

相关推荐

2025-12-24 02:41
哈尔滨工业大学 Java
又是焦虑的一个晚上,不想投了不想面了,想静下心来好好沉淀,也是给自己喘口气的机会。在各个平台焦虑地刷来刷去,想了想还是过来写一下从十月以来五次面试的收获。十月:可以说是惨不忍睹。第一次面的小厂,基本没有答出来的问题,当时光顾着看大家的面经背一些高频八股,却连最基本的东西都忘光了。第二次面的滴滴,这次的八股是最最常见的一些,JVM、垃圾回收、隔离级别,算法也是mid,可惜这个机会没有抓住,当时hot100只刷了30,甚至很多语法都不熟。面完自欺欺人沉淀了两个月,实际上这两个月八股一点没背,算法倒是进步了一些。十二月考完试开始海投,明显比十月份时约面难多了。小红书:也很可惜,感觉和面试官聊得不错,问了我很多我做过的ai方面的东西,但是组内主要是做客户端的,反复确认了好几遍我一点都不了解客户端吗。还有最后问了一些Java基础的问题,也是挺好笑,我依旧是一点不知道,太浮躁,Java基础的数据结构的八股一点都没背,很多东西看着差不多就放过去。美团:史上最难堪的一次,详见主页。项目、八股都问到了很多很多我的盲点,可以当错题集用了(笑。面完彻底崩溃。一直都在自欺欺人,实际上就是什么也不会。小厂:莫名其妙。两人在会议间里一起问我。问了两个智力题,都答上来了,依旧挂。可能也是我八股答得不好。这个厂是做类似交易平台的,所以他也问了挺多数据库的事,深挖了一下项目,如果超卖一人一单不用redis而是用MySQL的锁怎么解决,完全愣住了,没准备过,MySQL只会背八股和最简单的查询语句。还发现这个Java基础的数据结构依旧是有问题。哈哈,迄今为止没过过一面,没心力也没胆量继续投了。这一两周把学校的实验、期末收尾也确实挺忙的,回家之后随缘投一投吧,学校里面试太不方便了。刚刚把八股来回翻了翻,想想自己有多少不会,想想自己有多少欠缺,把投的一份简历撤回了。每次投完简历都会做噩梦、被约面试也会做噩梦,给自己一段时间休整,回家以后全力梭哈,希望来年能有好结果。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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