1. 课程导学:缓存一致性问题概述、课程目标与学习路径、前置知识要求

1.1 缓存一致性问题概述

在 Go 后端项目中,Redis 常被用作业务接口的加速层。当数据库(如 MySQL)中的数据发生变更时,如何保证 Redis 缓存中的数据与数据库保持一致,是分布式系统中最经典也最棘手的挑战之一。

缓存不一致的典型场景包括:

  • 先更新数据库,再删除缓存:删除缓存失败导致旧数据残留。
  • 先删除缓存,再更新数据库:并发读请求在删除后、更新前回填旧数据。
  • 主从延迟:从库尚未同步主库的更新,缓存回填了旧值。
  • 缓存过期与并发回填:多个请求同时发现缓存失效,同时回填导致数据错乱。
核心矛盾:缓存层追求高性能(读多写少、低延迟),数据库层追求强一致性(ACID 事务)。两者天然存在时间窗口,不一致是常态,一致是需要设计的。
缓存一致性问题产生流程 缓存一致性问题产生流程 应用服务 (Go 业务接口) Redis 缓存 (高性能读) MySQL 数据库 (强一致性) ⚠ 不一致时间窗口 更新数据库 → 删除/更新缓存 之间的毫秒级间隙,并发读可能回填旧数据 删除缓存失败 旧数据残留 并发回填旧值 读写竞争 主从延迟 从库未同步

1.2 课程目标与学习路径

本课程旨在帮助 Go 后端开发者掌握一套可落地、可验证、可运维的缓存一致性方案。学完本课程,你将能够:

维度 具体目标 对应章节
理论 理解缓存不一致的 4 种核心场景及其根因 第 1-2 章
策略 掌握 Cache-Aside、Read/Write-Through、延迟双删、异步补偿等主流策略 第 3-6 章
工程 在 Go 项目中实现带重试、带监控的缓存一致性代码 第 7-12 章
进阶 使用 Canal + MQ 实现最终一致性、处理分布式事务场景 第 13-18 章
实战 完成一个完整的订单缓存一致性项目(含单元测试与压测) 第 19-30 章

学习路径分为三个阶段:

  1. 基础夯实(第 1-6 章):理解问题本质,掌握经典策略的优缺点。
  2. 工程落地(第 7-18 章):在 Go 项目中编码实现,引入重试、监控、消息队列等工业级组件。
  3. 项目实战(第 19-30 章):从零搭建一个高并发订单服务,完整走通缓存一致性全流程。
学习建议:每章都配有可运行的 Go 代码示例。建议在本地搭建 Redis + MySQL 环境,边学边调试,效果最佳。
课程学习路径与知识体系 课程学习路径与知识体系 阶段一:基础夯实 第 1-6 章 问题分析 + 经典策略 Cache-Aside / 延迟双删 阶段二:工程落地 第 7-18 章 Go 代码实现 + 重试 监控 + Canal + MQ 阶段三:项目实战 第 19-30 章 订单服务完整实现 单元测试 + 压测 课程结束后你将具备的核心能力 ✅ 独立设计缓存一致性方案 ✅ 在 Go 项目中落地生产级代码 ✅ 定位并修复缓存不一致 Bug ✅ 使用 Canal + MQ 实现最终一致性 ✅ 通过压测验证缓存策略的有效性

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 的开发机器,以及一颗准备好面对“缓存坑”的心。