1. 课程导学:缓存一致性问题概述、课程目标与学习路径、前置知识要求
1.1 缓存一致性问题概述
在 Go 后端项目中,Redis 常被用作业务接口的加速层。当数据库(如 MySQL)中的数据发生变更时,如何保证 Redis 缓存中的数据与数据库保持一致,是分布式系统中最经典也最棘手的挑战之一。
缓存不一致的典型场景包括:
- 先更新数据库,再删除缓存:删除缓存失败导致旧数据残留。
- 先删除缓存,再更新数据库:并发读请求在删除后、更新前回填旧数据。
- 主从延迟:从库尚未同步主库的更新,缓存回填了旧值。
- 缓存过期与并发回填:多个请求同时发现缓存失效,同时回填导致数据错乱。
核心矛盾:缓存层追求高性能(读多写少、低延迟),数据库层追求强一致性(ACID 事务)。两者天然存在时间窗口,不一致是常态,一致是需要设计的。
1.2 课程目标与学习路径
本课程旨在帮助 Go 后端开发者掌握一套可落地、可验证、可运维的缓存一致性方案。学完本课程,你将能够:
| 维度 | 具体目标 | 对应章节 |
|---|---|---|
| 理论 | 理解缓存不一致的 4 种核心场景及其根因 | 第 1-2 章 |
| 策略 | 掌握 Cache-Aside、Read/Write-Through、延迟双删、异步补偿等主流策略 | 第 3-6 章 |
| 工程 | 在 Go 项目中实现带重试、带监控的缓存一致性代码 | 第 7-12 章 |
| 进阶 | 使用 Canal + MQ 实现最终一致性、处理分布式事务场景 | 第 13-18 章 |
| 实战 | 完成一个完整的订单缓存一致性项目(含单元测试与压测) | 第 19-30 章 |
学习路径分为三个阶段:
- 基础夯实(第 1-6 章):理解问题本质,掌握经典策略的优缺点。
- 工程落地(第 7-18 章):在 Go 项目中编码实现,引入重试、监控、消息队列等工业级组件。
- 项目实战(第 19-30 章):从零搭建一个高并发订单服务,完整走通缓存一致性全流程。
学习建议:每章都配有可运行的 Go 代码示例。建议在本地搭建 Redis + MySQL 环境,边学边调试,效果最佳。
1.3 前置知识要求
为了确保学习效果,建议你具备以下基础:
| 领域 | 具体要求 | 说明 |
|---|---|---|
| Go 语言 | 熟悉 goroutine、channel、sync 包、error 处理 | 课程代码基于 Go 1.21+,使用标准库 + go-redis + gorm |
| Redis | 了解基本数据结构(String、Hash、List)、过期策略、Pipeline | 课程会深入讲解缓存操作细节,但不会从零教 Redis 基础 |
| MySQL | 掌握 CRUD、事务、索引基础 | 用于模拟业务数据库的读写操作 |
| HTTP / RPC | 了解 RESTful API 设计或 gRPC 基本概念 | 业务接口以 HTTP 为主,部分章节涉及 gRPC |
注意:如果你对 Go 的并发编程(如 sync.Mutex、sync.WaitGroup)还不够熟练,建议先花 1-2 天复习相关知识点。课程第 7 章之后会大量使用并发控制来保证缓存操作的原子性。
本课程不要求你具备分布式系统或消息队列的实战经验——这些内容会在课程中从零讲解。你只需要一台安装了 Go、Redis、MySQL 的开发机器,以及一颗准备好面对“缓存坑”的心。