主题
Redis 学习计划
📋 学习目标
从 0 到 1 系统掌握 Redis:会用(命令、数据结构、客户端)、懂原理(单线程、IO 多路复用、持久化、集群)、能落地(缓存设计、分布式锁、消息队列等真实业务场景)、面试稳过(覆盖大厂高频考点)。
本教程默认环境中已有可用的 Redis Server(
127.0.0.1:6379),不再花篇幅讲安装。聚焦点是「使用」与「底层逻辑」。
🎯 适合人群
- 零基础小白:从未接触 NoSQL / 缓存概念,对「为什么需要 Redis」都模糊。
- 进阶开发者:用过
get/set,但对底层数据结构、持久化、集群一知半解。 - 面试备战者:需要系统覆盖 Redis 高频面试题。
🗺 全局路线图
┌──────────────────────────┐
│ 第 1 章:Redis 是什么 │
│ 为什么快? │
└────────────┬─────────────┘
│
┌────────────────────────┼────────────────────────┐
│ │ │
┌────────▼─────────┐ ┌────────▼─────────┐ ┌────────▼─────────┐
│ 数据类型篇 │ │ 持久化与事务 │ │ 高可用与集群 │
│ Ch 2 - Ch 4 │ │ Ch 5 - Ch 7 │ │ Ch 8 - Ch 10 │
│ │ │ │ │ │
│ • 五大基础类型 │ │ • 过期与淘汰 │ │ • 主从复制 │
│ • 三大特殊类型 │ │ • RDB/AOF │ │ • 哨兵 Sentinel │
│ • 底层编码 │ │ • 事务/Pipeline │ │ • Cluster 集群 │
│ │ │ • Lua/Pub-Sub │ │ │
└───────────────────┘ └────────────────────┘ └────────────────────┘
│
┌────────────────────────┼────────────────────────┐
│ │
┌────────▼─────────────────┐ ┌──────────────▼──────────────┐
│ 工程实战篇 │ │ 综合项目 │
│ Ch 11 - Ch 13 │ │ Ch 14 │
│ │ │ │
│ • 分布式锁(含 Redlock) │ │ • 秒杀系统 / 短链服务 / │
│ • 三大缓存问题 + 一致性 │ │ Feed 流(综合实战) │
│ • 性能优化与排障 │ │ │
└────────────────────────────┘ └──────────────────────────────┘第一阶段:入门认知(第 1 周)
第 1 章 Redis 是什么 & 为什么快
- [ ] 缓存的本质:CPU Cache → 内存 → 磁盘的速度差距
- [ ] Redis 的定位:内存型 KV 数据库 vs 关系型数据库
- [ ] 为什么 Redis 这么快?三大原因(内存、单线程、IO 多路复用)
- [ ] 单线程模型:到底单的是什么?6.0 多线程改了什么?
- [ ] IO 多路复用:select / poll / epoll 一图看懂
- [ ] RESP 协议:和 Redis 服务器对话的「黑话」
- [ ]
redis-cli基本操作与 Hello World
练习任务:
用
nc(netcat)手动构造 RESP 协议报文,与 Redis 服务器通信完成一次SET和GET。
第二阶段:数据类型篇(第 2-3 周)
第 2 章 五大基础数据类型
- [ ] String:SDS(简单动态字符串)的设计精髓、int/embstr/raw 三种编码
- [ ] List:3.2 之前 ziplist+linkedlist,之后 quicklist 的演进
- [ ] Hash:ziplist / listpack / hashtable 的切换阈值
- [ ] Set:intset 与 hashtable 的选择
- [ ] ZSet:跳跃表(Skip List)为什么不用红黑树?
第 3 章 三大特殊数据类型
- [ ] Bitmap:用 1 bit 实现海量布尔状态(签到、活跃用户)
- [ ] HyperLogLog:12 KB 估算 2^64 个元素的基数(UV 统计)
- [ ] Geo:基于 GeoHash + ZSet 实现「附近的人」
第 4 章 Key 设计与命令进阶
- [ ] Key 命名规范与最佳实践
- [ ]
SCAN渐进式遍历 vsKEYS阻塞陷阱 - [ ]
EXPIRE/TTL/PERSIST - [ ] 通用命令:
TYPE/OBJECT ENCODING/MEMORY USAGE
第三阶段:内存与持久化(第 4 周)
第 5 章 过期与内存淘汰
- [ ] 过期 Key 的三种删除策略:定时、惰性、定期
- [ ] 8 种内存淘汰策略:noeviction / allkeys-lru / volatile-lfu ...
- [ ] LRU vs LFU:算法原理与近似实现
- [ ]
maxmemory与maxmemory-policy配置实战
第 6 章 持久化:RDB / AOF / 混合
- [ ] RDB:快照机制、
SAVEvsBGSAVE、fork与 COW - [ ] AOF:写后日志、三种刷盘策略(always/everysec/no)
- [ ] AOF 重写:为什么要重写?怎么重写?
- [ ] 4.0 混合持久化:RDB 头 + AOF 尾
- [ ] 数据恢复优先级与故障演练
第 7 章 事务、Pipeline、Lua、Pub-Sub、Stream
- [ ] Redis 事务:
MULTI/EXEC/DISCARD/WATCH - [ ] 为什么 Redis 事务不是「真事务」?没有回滚怎么办?
- [ ] Pipeline:批量命令的网络优化
- [ ] Lua 脚本:原子性 + 复杂逻辑
- [ ] 发布订阅 vs Stream:消息队列的两种姿势
第四阶段:高可用与集群(第 5-6 周)
第 8 章 主从复制
- [ ] 全量同步 vs 增量同步
- [ ]
replication backlog与runid的作用 - [ ] 主从延迟问题与读写分离的坑
第 9 章 哨兵(Sentinel)高可用
- [ ] 哨兵的三大任务:监控、通知、自动故障转移
- [ ] 主观下线(SDOWN)vs 客观下线(ODOWN)
- [ ] Raft-like 哨兵 Leader 选举
- [ ] 客户端如何感知主节点切换
第 10 章 Cluster 集群与数据分片
- [ ] 16384 个槽(slot)的分配与迁移
- [ ] 一致性哈希 vs 哈希槽:为什么 Redis 选了后者?
- [ ] Gossip 协议:节点间如何「八卦」
- [ ] MOVED / ASK 重定向
- [ ] 集群下的多 Key 操作:HashTag
第五阶段:工程实战(第 7-8 周)
第 11 章 分布式锁
- [ ] 单机锁:
SETNX+EXPIRE的演进史 - [ ]
SET key value NX PX 30000一条命令搞定 - [ ] 锁的「续命」问题:Redisson 看门狗机制
- [ ] Redlock 算法:争议与适用场景
- [ ] 分布式锁的 5 个易错点
第 12 章 缓存设计三大问题 + 一致性
- [ ] 缓存穿透:布隆过滤器 / 空值缓存
- [ ] 缓存击穿:互斥锁 / 永不过期 + 异步更新
- [ ] 缓存雪崩:随机过期 / 多级缓存 / 限流降级
- [ ] 缓存与数据库一致性:Cache Aside / Read-Write Through / Write Behind
- [ ] 「先删缓存还是先更新数据库」终极辨析
第 13 章 性能优化、监控与排障
- [ ] 慢查询日志
SLOWLOG - [ ] 大 Key / 热 Key 排查与拆分
- [ ]
redis-cli --bigkeys/--hotkeys/MEMORY DOCTOR - [ ] BIO 后台线程与阻塞命令排查
- [ ] 监控指标:
INFO详解、Prometheus + Grafana 接入
第六阶段:综合实战(第 9 周)
第 14 章 综合项目(三选一)
- [ ] 🛒 秒杀系统:库存扣减、限流、防超卖、异步下单
- [ ] 🔗 短链服务:发号器、缓存设计、热点统计
- [ ] 📰 Feed 流:推/拉/推拉结合模式,时间线缓存设计
📁 目录结构约定
learnNote/redis/
├── 0_learn_plan.md ← 本文件(学习总纲)
├── task.md ← 教程产出规范
├── interview.md ← 面试题总索引
│
├── 01_intro.md ← 第 1 章文档
├── 01_intro/ ← 第 1 章配套资源
│ ├── demo.html ← 浏览器可交互演示
│ └── code/
│ └── hello_redis.py ← 实战代码
│
├── 02_basic_types.md ← 第 2 章
├── 02_basic_types/
│ ├── demo.html
│ └── code/
│ └── ...
│
└── ... (其余章节同样结构)⏱ 时间建议
| 阶段 | 章节 | 建议时间 | 难度 |
|---|---|---|---|
| 第一阶段:入门认知 | Ch 1 | 3 天 | ⭐ |
| 第二阶段:数据类型 | Ch 2-4 | 1.5 周 | ⭐⭐ |
| 第三阶段:内存与持久化 | Ch 5-7 | 1 周 | ⭐⭐⭐ |
| 第四阶段:高可用与集群 | Ch 8-10 | 2 周 | ⭐⭐⭐⭐ |
| 第五阶段:工程实战 | Ch 11-13 | 1.5 周 | ⭐⭐⭐⭐ |
| 第六阶段:综合项目 | Ch 14 | 1 周 | ⭐⭐⭐⭐⭐ |
💡 建议:每天投入 1-2 小时;每章先看文档 → 跑实战代码 → 玩 demo.html → 默写面试题。最后用第 14 章的项目把所有知识串起来。
📚 推荐资源
官方
- Redis 官方文档
- Redis Commands — 命令速查
- Try Redis Online — 浏览器中体验
书籍
- 《Redis 设计与实现》— 黄健宏(最适合理解底层)
- 《Redis 深度历险:核心原理与应用实践》— 钱文品(老钱)
- 《Redis 实战》— Josiah L. Carlson