Redis 核心技术与实战 · 深度学习指南(细化版)

作者:蒋德钧(中科院)| 真实结构:41 讲正文 + 加餐/测试(共 53 个文件) 定位:后端架构「万能瑞士军刀」的系统课——从单线程为什么快、数据结构、持久化,到缓存三大问题、分布式锁、切片集群、秒杀实践。


一、这门课到底讲什么

Redis 不只是「缓存」,它是缓存、分布式锁、排行榜、计数器、消息队列、布隆过滤器的综合底座。这门课按「基础架构 → 数据结构 → 高性能 → 持久化 → 主从哨兵 → 集群 → 缓存实践 → 并发与锁」层层递进,学完你能答出「为什么 Redis 快」「缓存怎么不崩」「分布式锁怎么不掉坑」。


二、真实讲次大纲(按模块)

模块 1:架构与高性能(第 1–3 讲)

讲次核心知识点
01基本架构:一个键值数据库包含什么(访问框架/索引/操作/存储)
02数据结构:快的 Redis 有哪些慢操作
03高性能 IO 模型:为什么单线程 Redis 那么快

模块 2:持久化与高可用(第 4–9 讲)

讲次核心知识点
04AOF 日志:宕机怎么避免数据丢失
05内存快照(RDB):怎么快速恢复
06数据同步:主从库如何数据一致
07–08哨兵机制:主库挂了怎么不间断服务、哨兵集群
09切片集群:数据多了加内存还是加实例

模块 3:数据结构实战(第 11–15 讲)

讲次核心知识点课程原案例
11「万金油」String 为什么不好用了大 key、占用膨胀
12一亿个 key 统计,用哪种集合HyperLogLog
13GEO、自定义数据类型附近的人
14怎么保存时间序列数据时序数据
15Redis 做消息队列的解决方案Stream

模块 4:性能与内存(第 16–21 讲)

讲次核心知识点
16异步机制:避免单线程阻塞
17CPU 结构怎么影响 Redis 性能(NUMA)
18–19响应延迟波动、Redis 变慢排查
20删除数据后内存占用率还很高(碎片)
21缓冲区:可能引发「惨案」的地方

模块 5:缓存实践(第 23–27 讲)

讲次核心知识点
23旁路缓存(Cache Aside)怎么工作
24替换策略:缓存满了怎么办(LRU/LFU)
25缓存和数据库数据不一致怎么解决
26缓存雪崩、击穿、穿透
27缓存被污染了怎么办

模块 6:并发、锁与集群(第 29–39 讲)

讲次核心知识点
29无锁原子操作:并发访问
30Redis 实现分布式锁
31事务机制:Redis 能实现 ACID 吗
32–33主从同步、故障切换的坑;脑裂
35Codis vs Redis Cluster
36Redis 支撑秒杀场景的关键技术
37–39数据倾斜、通信开销、Redis 6.0 新特性

三、必须吃透的核心知识点

  1. 单线程为什么快(第 3 讲):纯内存 + 单线程(避免锁和上下文切换)+ IO 多路复用(一个线程管多个连接)。快不是因为「单线程」,而是因为「内存 + 高效模型」。

  2. AOF vs RDB(第 4–5 讲):AOF 记录每条写命令(更安全、文件大),RDB 是内存快照(恢复快、可能丢数据)。生产常「AOF + RDB 混合」。

  3. 缓存三兄弟(第 26 讲,面试必考):穿透(查不存在→布隆过滤器/缓存空值)、击穿(热点 key 过期→互斥锁/不过期)、雪崩(大量 key 同时过期→过期时间加随机)。

  4. 分布式锁(第 30 讲):SETNX + 过期时间 + 唯一值 + Lua 原子释放。坑:锁过期续期(看门狗)、主从切换丢锁(Redlock)。

  5. 切片集群(第 9、35 讲):数据分到多个实例(Redis Cluster 哈希槽 16384 个),解决单机内存上限。

  6. 秒杀实践(第 36 讲,精华):Redis 原子扣减库存 + 预扣 + Lua 脚本,把流量挡在数据库外。


四、引发思考

  1. Redis 单线程,为什么反而快?「多线程一定快」错在哪?
  2. 缓存和数据库一致性,Cache Aside 为什么「先更新数据库再删缓存」?
  3. 缓存雪崩、击穿、穿透三者本质区别?各自的解决方案?
  4. Redis 分布式锁有哪些坑?「锁过期了但业务没执行完」怎么办?
  5. Redis Cluster 的哈希槽(16384)是怎么分配和迁移的?
  6. 学完本课,回头看阶段三的「跳表」,Redis 的 ZSet 为什么用它?

五、学完自测

  • 能解释「Redis 为什么快」(3 个层面)
  • 能说出五种数据结构 + 典型场景
  • 能解释 AOF/RDB 区别与混合持久化
  • 能画出「缓存穿透/击穿/雪崩」的解决方案
  • 能用 Redis 实现一个正确的分布式锁

配套:装 Redis,跑一遍五种数据结构,用 info 命令看内存和命中率。