腾讯二面:如果你是王者荣耀的架构师,面对亿级别的排行榜,你会如何设计? 📅 发布时间:2026/7/4 21:34:41 👁️ 浏览次数: 本文从面试的角度跟大家一起探讨一下如何回答更好呢数据库的order by为什么不行为什么Redis是排行榜的“扛把子”Redis扛亿级数据可能存在哪些问题以及对应解决方案实现方案分治巨人的肩膀前人踩过的坑1. 数据库的order by很多小伙伴一提到排行榜就想到数据库的order by。比如微信运动的步数排行select * from user_info order by step desc这个实现没有问题的如果表的数据量少的话反而推荐这样实现。如果数据量多呢。则存在问题尤其还涉及亿级的数据量时~在亿级用户高并发实时更新的场景下会彻底崩盘。 原因一句话磁盘扛不住排序算不动并发撑不起。2.为什么Redis是排行榜的扛把子当数据量较大且需要实时更新并频繁查询时使用 Redis 的zset有序集合更为适合。zset是Redis提供的一种数据结构它类似于集合set但每个成员都关联着一个分数scoreRedis 使用这个分数来对集合中的成员进行排序。不仅仅是redis的zset支持排序API简单易用还因为redis的排序快、可扩展性强、能轻松应对高并发。2.1 redis排序快Redis 的数据全放内存避免磁盘读写核心操作秒回更新分数ZADD→ 快如闪电查排名ZREVRANK→ 毫秒响应查Top 100ZREVRANGE→ 瞬间出结果以下为 Redis vs MySQL 性能对比亿级数据2.2 可扩展性强分片存储轻松应对亿级数据。Redis通过分片存储将数据拆分到多个实例如同把1亿用户分配到10个小数据库每个只需处理1000万数据轻松实现1️⃣ 线性扩展加机器就能提升容量和性能2️⃣ 压力分散读写请求分摊到不同分片避免单点瓶颈3️⃣ 独立扩容热点分片可单独升级配置不干扰其他节点类比理解把一仓库货物数据分装到10辆卡车分片每辆车只运1/10的货装卸速度自然快10倍2.3 轻松应对高并发Redis用内存操作单线程IO多路复用三把利剑轻松切开高并发大山1️⃣ 内存闪电读写数据全放内存比磁盘快10万倍2️⃣ 单线程无锁避免多线程切换损耗原子操作不怕并发冲突3️⃣ IO多路复用一个线程监听万个连接像银行超级柜员同时处理多窗口业务田螺哥打个比喻吧Redis就像一个超高效快餐窗口只卖预制菜内存数据→ 出餐快一个收银员专注打单单线程→ 不手忙脚乱智能叫号器管理排队IO多路复用→ 千人排队也能快速响应据有关测试证明单机Redis可扛10万 QPS分片集群轻松突破百万级并发。3.Redis扛亿级数据可能存在哪些问题以及对应解决方案3.1 热Key问题比如“全服TOP100”榜单容易造就热点key问题。全服玩家频繁查询 ZREVRANGE leaderboard 0 99获取Top 100导致所有请求集中访问 同一个Keyleaderboard。容易导致单分片CPU和带宽被打满假设数据分片不均匀。极端情况下Redis实例崩溃全服排行榜瘫痪可以通过这些方式解决1.多级缓存Redis jvm本地缓存请求优先读本地内存缓存缓存未命中时读Redis集群Redis集群内部缓存Top 100设置更短TTL读写分离 从库负载均衡主库处理写请求更新分数。多个从库轮询处理读请求查Top 100分片Key设计操作将排行榜按分数区间拆分成多个Key例如leaderboard:top1前100名leaderboard:top2101~1000名leaderboard:rest其他用户查询逻辑查Top 100时只需访问 leaderboard:top1。3.2 内存爆炸存储1亿用户若每个键占32字节如 user:123仅键就需约3.2GB加上分数和指针内存压力巨大。优化方案缩短键名将 user:123 转换为整数如123利用 Redis 的 int 编码优化内存。分片存储按用户ID哈希分片到多个 Redis 实例分散压力。3.3 数据持久化风险Redis 宕机可能导致最新数据丢失即使开启AOF默认每秒同步一次。容灾方案异步双写更新分数时同步写入 Kafka由消费者异步落库 MySQL用于故障恢复。混合持久化开启 RDB AOF平衡恢复速度与数据完整性。4. 实现方案分治比如我们要查询王者荣耀巅峰赛的前一百积分的玩家。其实就是一个TOP N问题我们可以按照这种思路按区间拆分动态路由聚合查询4.1. 按区间拆分把排行榜切成小块蛋糕**怎么拆高分玩家放「金盘子」2500分以上 →rank:2500_2600中分玩家放「银盘子」2400~2500分 →rank:2400_2500低分玩家丢「大锅」0~2400分 →rank:0_2400为什么快查Top 100只需翻「金盘子」不用搅动整个大锅盘子越小 → 翻找速度越快4.2 动态路由玩家换区自动导航怎么动玩家积分变化时自动检测该去哪# 伪代码2503分该放哪个区间 if2500 new_score 2600: 扔进 rank:2500_2600 elif2400 new_score 2500: 扔进 rank:2400_25004.3 聚合查询拼图式合并结果怎么拼从高到低翻盘子先查「金盘子」→ 拿到前50名不够100再查「银盘子」→ 补50名全局排序把两个盘子的100人按分数重新排座次5. 巨人的肩膀前人踩过的坑慎用ZREVRANGE类全量操作直接使用ZREVRANGE获取Top N时若数据量过大如1亿用户会触发O(N)复杂度遍历导致Redis线程阻塞警惕黑马用户冲击分片策略突然出现的高分用户如积分暴涨至前0.1%可能打乱原有分片规则导致数据集中在某个分片引发热点。内存爆炸与性能抖动亿级用户存储占用内存超限且RDB/AOF持久化时fork子进程引发内存翻倍。数据迁移阻塞服务用户积分跨分片迁移时若未原子操作可能导致数据丢失或重复。
HarmonyOS NEXT 华为账号深度集成:一键登录逻辑与 UnionID 身份体系的构建 前言:生命科学领域的“数字骨架” 在数字化生命科学的研究范式中,数据的唯一性与可追溯性是科学结论可靠性的基石。无论是端粒长度的演变序列,还是细胞代谢活性的实时监测,每一组精密的数据都必须精准地锚定在特定的个体身份之上。… 2026/7/3 17:06:56
异物防护等级-IP67 异物防护等级(外文名:Ingress Protection Rating,侵入防护等级),又称“防水等级”“防尘等级”,是衡量机械和电子设备对固体异物、液体渗透及意外接触防护能力的国际通用标准,其等级代码由国际标… 2026/7/4 23:35:07
对于陌生平台和软件,把握的思路 这里还要讲一个东西 其实在现代 有一个门槛,一直没人说 就是普通人看不懂复杂的软件工具,和网页平台 其实,我有疑惑的 为什么这些东西创造者,完全不在乎用户能否理解 可能公司考核指标不一样吧 商业化,利润者一块&… 2026/7/5 12:43:53
如何3分钟为Android Studio安装中文语言包:完整界面汉化终极指南 如何3分钟为Android Studio安装中文语言包:完整界面汉化终极指南 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 你是… 2026/7/5 12:39:52
图像识别进阶——基于迁移学习的天气分类实战 1. 迁移学习在天气分类中的优势天气图像分类是计算机视觉中一个非常实用的应用场景。想象一下,如果你正在开发一款户外运动APP,能够通过手机摄像头实时识别当前天气状况,给用户提供穿衣建议或活动推荐,那该有多酷!但现… 2026/7/5 12:39:52
YOLO小目标检测优化:Wise-IoU损失函数实战 1. 为什么小目标检测总是定位不准?在目标检测领域,YOLO系列算法因其速度和精度的平衡而广受欢迎。但当我们处理小目标检测任务时,经常会遇到一个令人头疼的问题——检测框定位不准。这个问题在无人机航拍、医学影像分析、工业质检等场景尤为突… 2026/7/5 12:37:52
OpenCV 4.9.0 图像分割实战:Python 实现 3 种边缘检测算法对比 OpenCV 4.9.0 图像分割实战:Python 实现 3 种边缘检测算法对比边缘检测是计算机视觉中最基础且关键的技术之一,它能有效提取图像中的结构信息,为后续的目标识别、场景理解等任务奠定基础。本文将基于 OpenCV 4.9.0,通过 Python 代… 2026/7/5 12:37:52
4-20mA电流环工业应用与STM32+XTR116设计详解 1. 4-20mA电流环标准与工业应用背景在工业自动化领域,4-20mA电流环传输堪称模拟信号传输的"黄金标准"。这种传输方式之所以能历经数十年而不衰,核心在于其独特的抗干扰特性——电流信号在长距离传输时不受线路电阻变化影响,且能通过… 2026/7/5 12:35:51
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36