1. 缓存一致性闭环概述
1.1 缓存一致性问题定义
在分布式后端架构中,缓存(如 Redis、Memcached、本地堆缓存)与数据库(如 MySQL、PostgreSQL)之间因数据更新时序不一致,导致业务读取到过期或脏数据,即缓存一致性问题。该问题本质上是数据源(DB)与缓存副本(Cache)之间的状态分歧。
核心矛盾:数据库写入成功 → 缓存未更新 / 更新失败 / 更新顺序错乱 → 后续读请求命中旧缓存 → 业务逻辑异常。
典型场景包括:
- 先写 DB 后删缓存:删除缓存失败,导致缓存残留旧数据。
- 先删缓存后写 DB:并发读请求在 DB 写入前回填缓存,回填了旧值。
- 主从延迟 + 缓存淘汰:从库未同步完成时,缓存回填了从库的旧数据。
- 本地缓存与分布式缓存不一致:JVM 内缓存更新未广播至其他节点。
| 不一致类型 | 产生原因 | 影响范围 |
|---|---|---|
| 缓存与 DB 绝对不一致 | 写 DB 成功,缓存删除/更新失败 | 全量读请求命中脏数据 |
| 缓存与 DB 时序不一致 | 并发读写导致回填顺序错乱 | 短时间窗口内的读请求 |
| 多级缓存间不一致 | 本地缓存未及时失效 | 单节点内业务逻辑 |
| 跨数据中心不一致 | 异地多活同步延迟 | 跨区域读流量 |
1.2 闭环架构设计理念
缓存一致性不能仅靠单次操作保障,必须构建检测 → 修复 → 验证 → 监控的闭环。闭环架构的核心思想是:允许短暂不一致,但必须可发现、可补偿、可收敛。
设计原则:写操作保证最终一致性,读操作通过补偿机制修复不一致;闭环不是消灭不一致,而是将不一致的窗口和影响控制在业务可接受范围内。
闭环架构包含四个核心环节:
- 检测层:通过对比缓存与 DB 的数据版本号、校验和或时间戳,发现不一致条目。
- 修复层:异步或同步地将正确数据从 DB 回填至缓存,或主动淘汰脏缓存。
- 验证层:修复后二次校验,确保缓存与 DB 状态一致。
- 监控与告警层:统计不一致率、修复耗时、修复失败次数,触发告警或自动降级。
1.3 课程目标与学习路径
本课程旨在培养学员从理论到实战构建缓存一致性闭环中间件的能力,覆盖性能调优与故障排查两大核心维度。
| 维度 | 具体目标 | 对应章节 |
|---|---|---|
| 理论 | 理解缓存一致性问题的本质、CAP 与 BASE 在缓存场景的权衡 | 第 1-3 章 |
| 架构 | 掌握闭环中间件的分层设计、组件选型与接口定义 | 第 4-7 章 |
| 实现 | 独立开发检测、修复、验证、监控四个核心模块 | 第 8-15 章 |
| 调优 | 针对高并发场景优化检测频率、修复并发度、缓存淘汰策略 | 第 16-22 章 |
| 故障排查 | 通过日志、指标、链路追踪定位不一致根因并快速恢复 | 第 23-28 章 |
| 实战 | 完成一个生产级闭环中间件的完整设计与压测 | 第 29-30 章 |
前置要求:学员需熟悉 Redis/MySQL 基本操作、Java 并发编程基础、Spring Boot 项目搭建。课程中所有代码示例基于 JDK 17 + Spring Boot 3.x + Redisson 3.20+。
1.4 课程特色与交付物
- 可运行代码仓库:每章配套完整可编译的 Spring Boot 项目,包含单元测试与集成测试。
- 压测脚本与报告:基于 JMeter 和 wrk 的压测脚本,附带性能基线数据。
- 故障注入工具:模拟缓存删除失败、网络超时、主从切换等异常场景。
- 监控大盘模板:Prometheus + Grafana 监控面板,覆盖不一致率、修复延迟、缓存命中率等核心指标。
学习建议:每章先阅读理论部分,再运行配套代码观察效果,最后尝试修改参数或注入故障来加深理解。建议准备一个 2C4G 的 Linux 虚拟机或 Docker 环境用于实验。