Java 项目实战中怎么基于 Redis 实现高并发场景下的点赞与排行榜功能

舞姬之光

舞姬之光

2026-08-03

742人浏览

原创

redis实现高并发点赞与排行榜的核心是:点赞用string+lua脚本保证“检查-设置-计数”原子性,排行榜用zset实时维护top n,数据异步回写mysql并定时校验,辅以令牌桶限流和本地缓存降级。

java 项目实战中怎么基于 redis 实现高并发场景下的点赞与排行榜功能

在 Java 项目中,用 Redis 实现高并发点赞和排行榜,核心是利用 Redis 的原子操作、有序集合(ZSet)和内存高速读写特性,避开数据库锁和频繁 IO。关键不在于“能不能做”,而在于“怎么设计才能扛住流量、不丢数据、结果准确”。

点赞:用 Redis String + Lua 脚本保证原子性

直接对数据库 update count 容易超卖或漏计;用 Redis 的 INCRDECR 虽快但无法区分用户是否重复操作。正确做法是:用 Redis String 存“用户-内容”唯一键(如 like:post:123:user:456),配合 Lua 脚本实现“检查+设置+计数”三步原子执行。

  • 脚本里先 EXISTS 判断是否点过,没点过才 SETINCR 总数 key(如 like:post:123:count
  • Java 中用 RedisTemplate.execute() 执行 Lua,返回值表示是否新增点赞(便于前端更新按钮状态)
  • 设置合理过期时间(如 30 天),避免冷数据长期占内存

排行榜:用 Sorted Set 实时维护 Top N

别用 MySQL order by limit 做实时榜单——每秒几百次查询会拖垮 DB。Redis ZSet 天然支持按 score 排序、范围查询、增删改 O(log N)。把“内容 ID”作为 member,“点赞数”作为 score,一条命令搞定实时排行。

Java JDK 25
Java JDK 25

Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。

下载
  • 每次点赞成功后,用 ZINCRBY like:rank 1 "post:123" 更新分数
  • 查前 100 名: ZREVRANGE like:rank 0 99 WITHSCORES(倒序,最新热帖优先)
  • 支持多维度榜单:比如按“24 小时增量”单独存一个 ZSet(key 加时间戳后缀),用 ZUNIONSTORE 合并周期榜

数据一致性:异步回写 + 定时补偿

Redis 是缓存,不是唯一数据源。点赞数最终要落库,但不能同步写 DB——否则失去高并发意义。策略是:

  • 点赞成功只写 Redis,返回前端“已生效”
  • 用消息队列(如 Kafka/RocketMQ)或定时任务,将变更批量回写 MySQL(例如每 5 秒聚合一次增量)
  • 加一层“校验任务”:每天凌晨比对 Redis 和 DB 的总点赞数,自动修复偏差(实际线上偏差率通常低于 0.01%)

防刷与降级:加令牌桶 + 本地缓存兜底

真实场景中,机器人刷赞、突发热点导致 Redis 压力飙升。需主动限流和容错:

  • 用 Redis + Lua 实现分布式令牌桶,单用户每分钟最多点 5 次(key:rate:like:user:456
  • 排行榜接口加 Caffeine 本地缓存(TTL 10s),缓存 ZREVRANGE 结果,减轻 Redis 压力
  • Redis 故障时,降级为查 MySQL 的“准实时榜”(带 5 分钟延迟),保证功能可用

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

3841

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

2838

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

2854

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

637

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

602

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

705

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1315

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

18844

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

646

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程