Skip to content

Redis 学习计划

📋 学习目标

从 0 到 1 系统掌握 Redis:会用(命令、数据结构、客户端)、懂原理(单线程、IO 多路复用、持久化、集群)、能落地(缓存设计、分布式锁、消息队列等真实业务场景)、面试稳过(覆盖大厂高频考点)。

本教程默认环境中已有可用的 Redis Server127.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 服务器通信完成一次 SETGET


第二阶段:数据类型篇(第 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 渐进式遍历 vs KEYS 阻塞陷阱
  • [ ] EXPIRE / TTL / PERSIST
  • [ ] 通用命令:TYPE / OBJECT ENCODING / MEMORY USAGE

第三阶段:内存与持久化(第 4 周)

第 5 章 过期与内存淘汰

  • [ ] 过期 Key 的三种删除策略:定时、惰性、定期
  • [ ] 8 种内存淘汰策略:noeviction / allkeys-lru / volatile-lfu ...
  • [ ] LRU vs LFU:算法原理与近似实现
  • [ ] maxmemorymaxmemory-policy 配置实战

第 6 章 持久化:RDB / AOF / 混合

  • [ ] RDB:快照机制、SAVE vs BGSAVEfork 与 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 backlogrunid 的作用
  • [ ] 主从延迟问题与读写分离的坑

第 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 13 天
第二阶段:数据类型Ch 2-41.5 周⭐⭐
第三阶段:内存与持久化Ch 5-71 周⭐⭐⭐
第四阶段:高可用与集群Ch 8-102 周⭐⭐⭐⭐
第五阶段:工程实战Ch 11-131.5 周⭐⭐⭐⭐
第六阶段:综合项目Ch 141 周⭐⭐⭐⭐⭐

💡 建议:每天投入 1-2 小时;每章先看文档 → 跑实战代码 → 玩 demo.html → 默写面试题。最后用第 14 章的项目把所有知识串起来。


📚 推荐资源

官方

书籍

  • 《Redis 设计与实现》— 黄健宏(最适合理解底层)
  • 《Redis 深度历险:核心原理与应用实践》— 钱文品(老钱)
  • 《Redis 实战》— Josiah L. Carlson

源码 & 进阶