Redis缓存击穿与分布式锁实战:专栏目录、源码与实验说明

Redis缓存击穿与分布式锁实战:专栏目录、源码与实验说明

热门商品缓存一过期,为什么几十个请求会同时回源?加了本地锁后,部署两个实例为什么仍会查两次数据库?Redisson看门狗会不会保证业务永远只有一个执行者?这套三篇实战用同一个可运行工程逐步回答。

从哪里开始

  1. 缓存击穿:热点缓存失效后的重建流程:先复现重复回源,再用本地锁、锁内二次检查和回填顺序减少查询。
  2. Redis分布式锁:租期、误删保护与原子回填:验证SET NX、TTL、唯一token、Lua比较删除和旧持有者回填。
  3. Redisson:看门狗续期与故障验证:区分显式租期和自动续期,观察业务进程退出、Redis不可用的行为。

专栏主页。本页免费,三篇实战设置为VIP可见;文章及资源的最终可用状态以平台审核结果为准。

一套工程,五组对照

固定环境为Java 21、Spring Boot 3.4.4、Redis 7.4.2、Redisson 3.45.1。商品1001来自真实H2表;两个独立JVM各持一份相同的只读数据,共享Redis。每次查询额外等待300毫秒,只为了扩大并发窗口。

方案 实例数 三轮每轮32并发的数据库查询次数
无保护 1 32 / 32 / 32
本地锁 1 1 / 1 / 1
本地锁 2 2 / 2 / 2
Redis租期锁 2 1 / 1 / 1
Redisson 2 1 / 1 / 1

本次480次冷请求、120次热请求全部正确,54项断言通过。原始报告同时保留逐请求耗时、查询计数、TTL和竞争者结果。人工延迟、本机调度和独立H2副本决定了这些结果只能用来研究机制,不能代表生产MySQL容量或吞吐量。

源码和报告怎么获取

下载完整源码与实验报告(VIP专享资源)。资源已上传,当前待审核;上传页面提示审核可能需要2至20个工作日,审核通过前无法保证下载可用。请先确认页面状态再决定是否获取会员。

压缩包包含Java工程、Maven配置、Redis准备脚本、Python实验脚本、三章正文、README和JSON原始报告,不含第三方二进制。需要联网下载Maven依赖,并准备JDK21、Maven、Python3和可执行Redis。

运行入口:

bash 复制代码
mvn -s maven-settings.xml package
bash experiments/setup_redis.sh
python3 experiments/run.py --rounds 3 --requests 32

脚本只连接127.0.0.1,启动自己独占的Redis及两个应用,最后清理本次创建的进程。故障实验会终止脚本自己创建的应用进程及Redis,请在独立实验环境中运行。

适合谁,能解决什么

适合已经会写Spring Boot接口、了解Redis基本命令,并希望亲自验证锁行为的Java开发者。阅读顺序建议为缓存击穿、原生Redis锁、Redisson。每章都有现象、代码、验证步骤、实测结果与练习,不需要先读完其他系列。

本套聚焦只读商品缓存重建,未验证Redis主从切换、Cluster、网络分区与生产写入事务。涉及扣库存、转账、发券时,仍需根据受保护资源设计幂等、版本校验或fencing机制。不要把缓存实验结论直接当成资金业务保证。

这是当前已完成的三篇实战,不对尚未发布的章节作交付承诺。正文基于作者既有文章重新组织,示例工程与脚本独立补齐,部分文字由AI辅助整理。欢迎在文章评论中附上环境、命令和脱敏错误信息,讨论复现实验中遇到的问题。

相关推荐
瑞克-桑切斯1 小时前
redis
数据库·redis·缓存
花间相见3 小时前
【计算基础|Redis02】【上手】五大数据类型命令逐条实操
数据库·redis·后端
时间的拾荒人3 小时前
Redis 入门详解:核心特性、重要文件与全局命令实战
开发语言·redis·面试
小南家的青蛙4 小时前
基于Spring Boot 2.x开发的微服务访问Redis的方案
redis·springboot
bksczm4 小时前
Redis 持久化:RDB 快照与 AOF 日志
数据库·redis·mybatis
IT规划师7 小时前
Redis 数据类型全解 - Stream 深度:消费者组、Pending 队列与死信处理(十)
redis·.net
我是大猴子17 小时前
redis
数据库·redis·缓存
码哥字节1 天前
Redis 分布式锁的 7 个坑:从 setnx 到 Redlock
redis·分布式锁
code2cat1 天前
【随笔】推理准入控制:请求进来之前,先给KV缓存留出位置
缓存·大语言模型·vllm