Redis实现高并发排行榜的功能

news/2025/3/15 10:07:16/

生活中排行榜是常见的功能,如游戏的排行榜,销售额的排行榜等等,排行榜不仅可以让用户有更多的激情参与到活动中来,而且可以更好的留存住用户,如下所示的拉新排行榜:
在这里插入图片描述
排行榜是一个常见的业务需求,下面我们就来聊聊如何通过Redis来设计一套支持高并发的排行榜的功能。

1、支持高并发的Zset实现榜单方案

假设业务需要展示排名前10名的用户在榜单上,假如在每一小时内前10名必然是在前200名之中产生,我们使用Redis的Zset数据结构来设计的方案如下所示:
在这里插入图片描述(1)定时任务定期(如60分钟执行一次)从数据库中同步排名前200名用户到Redis的Zset中。

(2)Redis实时维护前200名用户数据,当榜单数据发生变化的时候,我们同步数据到Redis上和数据库中,但是数据库中数据的变化不会在下一次定时任务执行之前影响到当前的榜单数据。

(3)定时任务下一个周期到了之后,就重新同步数据库中最新的前200名排名数据到Redis上。

本方案将排名靠前的数据(前200名)放到Redis中,这样避免在Redis的Zset中实时维护全量数据的问题,同时定时任务更新数据到Redis上的周期是可以根据业务需要来变更的。

针对突发的热点数据,当前的榜单设计就难以及时反映出来,需要等到下一个定时任务的周期才能同步到Redis上,当然本方案也是适应的,因为高并发下市面上的排行榜一般都是近实时的。

2、支持超高并发的榜单设计方案

在超大数据量、超高并发下,以至于超过了Redis单一节点的上限(单个Redis的写入瓶颈在2w左右,读瓶颈在10w左右),如果使用一个Zset来维护榜单数据的时候Redis是支撑不住的,即使Redis集群部署也是没有意义的,因为一个Zset就是一个key,一个key只会落在集群的一个Redis节点上,针对这样的场景,可以考虑采用分key的方案来实现榜单功能,如下图所示:
在这里插入图片描述
(1)将Zset上原先的一个key拆分成多个小key,然后通过这些小key来存储所有的榜单数据。拆分key的方案之前龙虾也分享过,有兴趣的小伙伴可以看一下:超高并发下Redis分key的实现原理

(2)实时维护Zset上的榜单数据变化

(3)定时任务定期从各Zset节点上各取前10名的数据,然后将各个节点报送过来的前10名汇总在一起后取出全局的前10名数据,最后同步到服务器的本地缓存上。
在这里插入图片描述
在超高并发、大数据量下通过分key的方案可以有效的解决单key无法支撑的问题,这就是一种分而治之的思想。

设计本地缓存是因为在超高并发下保护Redis节点的一种做法,所有的请求都会打到本地的缓存上,Redis通过定时任务将最新的数据定期同步到本地的缓存上。

结论:(1)高并发下排行榜的功能我们可以通过定时任务+Redis的方式来实现(2)针对超高并发、大数量的的业务场景,我们采用Redis分key+本地缓存的方案来实现。

http://www.ppmy.cn/news/1579280.html

相关文章

VUE的脚手架搭建引入类库

VUE的小白脚手架搭建 真的好久好久自己没有发布自己博客了,对于一直在做后端开发的我 ,由于社会卷啊卷只好学习下怎么搭建前端,一起学习成长吧~哈哈哈(最终目的,能够懂并简易开发) 文章目录 VUE的小白脚手架搭建1.下载node.js2.安装vue脚手架3.创建一个项目4.代码规范约束配置(…

深入理解TCP/IP网络模型及Linux网络管理

1. TCP/IP网络模型简介 TCP/IP(传输控制协议/互联网协议)是互联网的基础通信协议集。它分为四层,从上到下依次为: 应用层:处理高层协议,如HTTP、FTP等。传输层:负责端到端的通信,主…

java maven依赖传递以及版本冲突

文章目录 基本背景基本排查冲突工具依赖传递:很多依赖到底使用哪个版本的依赖dependencyManagement 作用exclusions其他问题 基本背景 你使用 java,使用 maven pom.xml 管理你的依赖包 可能常常遇到依赖版本冲突,或者很多依赖包,…

实验篇| CentOS 7 下 Keepalived + Nginx 实现双机高可用

为什么要做双机高可用?‌ 想象一下:你的网站突然宕机,用户无法访问,订单流失、口碑暴跌…💸 ‌双机热备‌就是解决这个痛点的终极方案!两台服务器互为备份,724小时无缝切换,保障业务…

ChatboxAI:开启高效智能交互的全能助手

一、项目概况:跨平台AI客户端的革新者 ChatboxAI 是一款集多功能于一体的 跨平台AI客户端应用,支持 Windows、MacOS、Android、iOS、Linux 及网页端,覆盖了主流操作系统和移动设备。其核心定位是为用户提供 灵活的模型选择 与 本地化智能服务,目前已集成包括 OpenAI 的 GP…

建筑管理(2): 施工承包模式,工程监理,质量监督

文章目录 一. 施工承包模式1. 施工总承包模式1.1 施工总承包的特点1.2 施工总承包模式中的承包方 2. 平行承包模式3. 联合体与合作体承包模式 二. 工程监理1. 强制实行监理的工程范围1.1 国家重点建设工程1.2 大中型公用事业工程(重点)1.3 成片开发建设的住宅小区工程1.4 必须实…

深入理解静态与动态代理设计模式:从理论到实践

静态代理设计模式 1.为什么需要代理设计模式? javaEE分层开发中,哪个层次对于我们来讲最重要 DAO---->Service---->Controller JavaEE分层中,最为重要的是Service层 Service层包含了那些代码 Service层核心功能(几十行 上百代码) 额外…

批量清空 Excel 文档主题、标记、作者、保存时间、总编辑时间元数据

在 Excel 文档中,通常会包含一些元数据,这些元数据中有文档的标题、版本号、作者编辑时间等等各种各样的信息,这些信息在某些情况下是非常隐私,也是非常重要的。因此当我们需要将文档发送给第三方的时候,我们通常需要对…