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辅助整理。欢迎在文章评论中附上环境、命令和脱敏错误信息,讨论复现实验中遇到的问题。

相关推荐
SHENGWEI胜为2 小时前
NVMe SSD写入速度突然下降?从SLC缓存耗尽到温度降速的排查方法
网络·缓存
clz13145212 小时前
ruoyi-cloud功能开发demo实战:三级联动 Redis Hash 缓存查看器
redis·缓存·哈希算法
yyk333242 小时前
Spark介绍
大数据·分布式·spark
成为你的宁宁2 小时前
【基于 SSH 与 JNLP 协议的 Jenkins 分布式构建方案】
分布式·jenkins
杨运交3 小时前
080-缓存模块-Spring Cache缓存键前缀设计与租户隔离实践
java·spring·缓存
PingCAP18 小时前
善战者无赫赫之功:消费金融核心系统的数据库选型与升级路径
数据库·分布式·架构
库库的数据库笔记20 小时前
金融核心交易系统的数据库国产信创改造该如何做?
大数据·数据库·分布式·mysql·oracle·金融·数据库架构
Pniubi21 小时前
力扣146.LRU缓存机制
算法·leetcode·缓存
欣栀♡1 天前
Spring 循环依赖不止三级缓存,Boot 2.6 起这个开关默认已经关了
java·spring·缓存