专栏名称: 码小辫
给程序员和编程爱好者分享计算机编程电子书以及相关的学习资源
目录
相关文章推荐
51好读  ›  专栏  ›  码小辫

腾讯二面:王者荣耀亿级排行榜,如何设计?

码小辫  · 公众号  ·  · 2025-05-03 17:25

主要观点总结

本文主要探讨了亿级用户排行榜的设计问题,从数据库的选择到Redis的使用,再到内存优化和分片存储等方案进行了详细阐述。文章还介绍了实现方案中的分治思想,包括按区间拆分、动态路由和聚合查询等。同时,文章也指出了在使用Redis时可能遇到的问题,如热Key问题、内存爆炸和数据持久化风险等,并给出了相应的解决方案。

关键观点总结

关键观点1: 数据库选择问题

对于亿级用户排行榜的设计,单纯使用数据库的order by方式在高并发实时更新的场景下会彻底崩盘,需要使用Redis等内存数据库来应对。

关键观点2: Redis的优势

Redis的zset有序集合结构适合用于排行榜的设计,其排序快、可扩展性强,能轻松应对高并发。Redis的数据全放内存,避免磁盘读写,核心操作秒回。

关键观点3: Redis可能遇到的问题及解决方案

Redis在应对亿级数据时可能遇到热Key问题、内存爆炸和数据持久化风险等,可以通过多级缓存、分片存储和异步双写等方式进行优化和解决。

关键观点4: 实现方案中的分治思想

按照区间拆分、动态路由和聚合查询等思路,将排行榜切成小块进行处理,可以提高查询效率和性能。

关键观点5: 其他注意事项

文章还提到了其他注意事项,如慎用ZREVRANGE类全量操作、警惕黑马用户冲击分片策略、内存爆炸与性能抖动等问题,以及数据迁移和离职交接时可能出现的风险。


正文

请到「今天看啥」查看全文


不仅仅是redis的zset支持排序,API简单易用,还因为redis的 排序快、可扩展性强、能轻松应对高并发

2.1 redis排序快

Redis 的数据 全放内存 ,避免磁盘读写,核心操作秒回:

  • 更新分数(ZADD)→ 快如闪电
  • 查排名(ZREVRANK)→ 毫秒响应
  • 查Top 100(ZREVRANGE)→ 瞬间出结果

以下为 Redis vs MySQL 性能对比(亿级数据)

操作 Redis (Sorted Set) MySQL (ORDER BY)
更新单个用户分数
0.1ms
5~50ms(索引更新代价高)
查询用户排名
0.2ms
100ms~5s(依赖索引和缓存)
获取Top 100
1ms
1s~10s(内存排序或临时文件)
高并发支撑能力
10万+/秒
1000+/秒(需分库分表)

2.2 可扩展性强

分片存储轻松应对亿级数据。

Redis通过 分片存储将数据拆分到多个实例 ,如同把1亿用户分配到10个小数据库,每个只需处理1000万数据,轻松实现:

  • 1️⃣ 线性扩展:加机器就能提升容量和性能
  • 2️⃣ 压力分散:读写请求分摊到不同分片,避免单点瓶颈
  • 3️⃣ 独立扩容:热点分片可单独升级配置,不干扰其他节点

类比理解:

把一仓库货物(数据)分装到10辆卡车(分片),每辆车只运1/10的货,装卸速度自然快10倍!

2.3 轻松应对高并发

Redis用 内存操作+单线程+IO多路复用 三把利剑,轻松切开高并发大山:

  • 1️⃣ 内存闪电读写:数据全放内存,比磁盘快10万倍
  • 2️⃣ 单线程无锁:避免多线程切换损耗,原子操作不怕并发冲突
  • 3️⃣ IO多路复用:一个线程监听万个连接,像银行超级柜员同时处理多窗口业务

田螺哥打个比喻吧

Redis就像一个 超高效快餐窗口

  • 只卖预制菜(内存数据) → 出餐快
  • 一个收银员专注打单(单线程)






请到「今天看啥」查看全文


推荐文章
悦网美文日赏  ·  刘瑜:告别印象主义
8 年前
教你学风水转运  ·  实测!升级iOS 10.3:iPhone竟多出7.8GB空间
8 年前
大家-腾讯新闻  ·  赖建诚:巨额财富带来的自由
8 年前