2293 字
11 分钟
Redis 系列导读:知识地图、必会主线与复习顺序
  1. 1Redis 系列导读:知识地图、必会主线与复习顺序本文
  2. 2Redis 中常见的数据类型有哪些?
  3. 3Redis 通常应用于哪些场景?
  4. 4Redis为什么这么快?
  5. 5Redis 常用的过期时间、删除 Key 命令有哪些?
  6. 6Redis 的过期 Key 是如何被删除的?
  7. 7Redis 内存满了怎么办?有哪些淘汰策略?
  8. 8缓存穿透、击穿、雪崩的区别与解决方案
  9. 9Redis 如何保证缓存与数据库的数据一致性?
  10. 10Redis 的持久化机制有哪些?
  11. 11Redis 主从复制的完整流程是什么?
  12. 12Redis 的哨兵机制是什么?
  13. 13Redis Cluster 模式与 Sentinel 模式的区别是什么?
  14. 14Redis 支持事务吗?如何实现?
  15. 15Redis 中如何实现分布式锁?
  16. 16Redis 的 Lua 脚本功能是什么?如何使用?
  17. 17如何解决 Redis 中的热点 Key 问题?
  18. 18Redis BigKey 有什么危害?如何发现和治理?
  19. 19为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
  20. 20Redis 的 LRU 和 LFU 有什么区别?
  21. 21Redis 数据类型和底层编码有什么区别?
  22. 22Redis 中跳表的实现原理是什么?
  23. 23Redis 的 ZSet 为什么使用跳表,而不是平衡树?
  24. 24Redis 的 RDB 快照如何生成?为什么会有写时复制?
  25. 25Redis 的 AOF 刷盘和重写有什么区别?
  26. 26Redis 断线后如何通过 PSYNC 部分重同步?
  27. 27Redis 主从切换为什么会丢数据?WAIT 能解决吗?
  28. 28Redis 集群会出现脑裂问题吗?
  29. 29Redisson 看门狗(watch dog)机制了解吗?
  30. 30Redis Cluster:哈希槽、Gossip 与故障转移
  31. 31Redis Pipeline 为什么能提高吞吐?能保证原子性吗?
  32. 32Redis 的 SCAN 和 KEYS 有什么区别?
  33. 33Redis 变慢时如何排查?SLOWLOG 能看到所有耗时吗?
  34. 34Redis 和 MySQL 有什么区别?
  35. 35Redis 为什么使用 SDS,而不是 C 字符串?
  36. 36Redis 的哈希表如何处理冲突和渐进式 rehash?
  37. 37Redis Cluster 的 MOVED 和 ASK 重定向有什么区别?
  38. 38Redis Cluster 为什么会报 CROSSSLOT?Hash Tag 怎么用?
  39. 39Redis 如何实现限流?固定窗口和滑动窗口怎么选?
  40. 40Redis Stream 如何保证消息消费?ACK 和 PEL 是什么?
  41. 41Redis 删除数据后为什么内存不下降?如何理解内存碎片?

学习 Redis,可以从一个商品详情缓存开始:选什么结构保存,为什么访问快,数据什么时候失效,数据库更新后怎么办,实例重启或切主会怎样,热点与并发写入又如何处理。这些问题构成同一条业务链,比逐篇背诵术语更容易形成全局认识。

这篇导读面向后端校招和常规初级开发。先掌握基础主线,再根据追问和项目场景选读。 本系列也收录了底层实现与故障处理专题,它们的重要性与岗位有关,不能全部视为每场面试都要回答的题目。下面的优先级是学习建议,不代表实际题频统计。

先在脑中建立这张地图#

Redis:用内存中的共享数据,支持低延迟访问与业务协调
├─ 存什么、为什么快
│ ├─ String / Hash / List / Set / ZSet → 根据访问方式选类型
│ └─ 内存、事件循环与 I/O 多路复用 → 理解吞吐和阻塞边界
├─ 内存有限,数据有生命周期
│ ├─ TTL、惰性删除、主动过期 → 失效后如何清理
│ └─ maxmemory、淘汰策略 → 容量不足时牺牲哪些数据
├─ Redis 和数据库一起工作
│ ├─ Cache Aside、一致性补偿 → 写入后避免长期读旧值
│ └─ 穿透 / 击穿 / 雪崩、HotKey / BigKey → 控制回源和热点
├─ 重启与故障后还能否使用
│ ├─ RDB / AOF → 本节点的数据恢复
│ └─ 主从复制、Sentinel、Cluster → 接管服务与数据分片
├─ 并发下怎么做组合操作
│ ├─ 单命令、MULTI/EXEC、WATCH、Lua → 原子性边界
│ └─ 分布式锁、续期、限流 → 业务场景的正确性
└─ 变慢或内存上涨后怎么定位
├─ SLOWLOG、延迟、SCAN、Pipeline → 诊断与调用优化
└─ 编码、SDS、rehash、碎片、COW → 解释现象的实现细节

三组区别要贯穿整个系列:过期不等于淘汰,持久化不等于复制,原子执行不等于失败回滚。 回答问题时先说明目标,再讲机制,最后交代机制保证不到的部分。

第一轮:按这十个问题读#

每站先读主入口,能够口头回答掌握标准,再进入下一站。不要求一开始读完后面所有深化文章。

顺序主入口读完要能回答
1数据类型商品对象、计数器、排行榜分别为什么选 Hash、String、ZSet?
2为什么快内存、多路复用和串行命令执行分别起什么作用?为什么长命令仍会拖慢整个实例?
3过期删除Key 到期和物理释放有什么区别?为什么不为每个 Key 建定时器?
4内存淘汰allkeys 与 volatile 的范围有什么差别?TTL 为什么不能代替容量规划?
5穿透、击穿、雪崩哪类请求冲击数据库?空值、布隆过滤器、互斥重建、随机 TTL 各解决什么?
6缓存与数据库一致性为什么常用先更新数据库再删缓存?删除失败和并发回填怎样补偿?
7持久化总览RDB 与 AOF 保存什么?数据丢失、恢复速度与资源开销怎么取舍?
8主从复制 → Sentinel 与 Cluster复制、高可用和分片分别解决什么?副本读为什么可能落后?
9分布式锁 → Lua为什么要 SET NX 带过期、唯一标识和原子释放?为什么续期仍不等于绝对安全?
10事务 → BigKeyMULTI/EXEC 为什么没有传统回滚?大对象与热点访问为何是不同问题?

事务文章是概念入口,第一轮还要记住:入队时的语法等错误可使事务无法执行;EXEC 中某条命令发生运行时错误,其他命令仍可能成功,之前的写入不会自动撤回。WATCH 检测被观察 Key 的修改后,可以让 EXEC 放弃执行,应用需按业务规则重试。不要用“命令连续执行”推导完整 ACID。

完整导航:按问题找文章#

目录编号与页面的系列导航一致:导读是第 1 篇,后续专题按基础主干、追问深化、场景拓展排列。主线用于第一轮学习,完整目录用于按问题查阅。

基础主干:先建立可解释的业务模型#

模块文章入口学习边界
数据与用途2. 类型选择、3. 应用场景能把业务访问模式与数据类型对应,基础命令按场景记
执行模型4. 为什么快分清单线程命令执行与同时管理多连接
Key 生命周期5. TTL 与删除命令、6. 过期策略、7. 淘汰策略命令是使用入口,策略解释自动清理与容量行为
缓存正确性8. 三类缓存故障、9. 数据库一致性能画出并发时序,说明补偿与最终一致性
本节点恢复10. 持久化总览先比较方案,刷盘和重写细节放到下一层
多节点架构11. 复制流程、12. 哨兵、13. Sentinel 与 Cluster会区分副本、自动切主与分片,不必先背全部选举细节
并发控制14. 事务、15. 锁、16. Lua能说明操作原子性、锁租约和失败回滚的边界
常见性能风险17. HotKey、18. BigKey热点是访问集中,大对象是操作与内存规模大

常见追问:主干能答清楚后再展开#

从哪个基础题展开深化文章需要进一步理解什么
为什么快、单线程19. 单线程与 I/O 多线程Redis 6/7 常见线程分工,不重复背两篇相似概述
淘汰策略20. LRU 与 LFU采样、频率衰减和访问模式取舍
数据类型21. 内部编码、22. 跳表原理、23. ZSet 与平衡树比较小对象紧凑编码、字典与跳表的互补;跳表两篇先原理后比较
持久化24. RDB 与 COW、25. AOF 刷盘与重写fork 暂停、额外内存、刷盘可靠性与文件重写
主从复制26. PSYNC 部分同步、27. 切主丢失与 WAITbacklog 与复制历史;确认写入不等于零丢失
高可用与锁28. 脑裂、29. Redisson 看门狗网络分区和租约续期的剩余风险
分片与查询性能30. Cluster 总览、31. Pipeline、32. SCAN 与 KEYS槽位路由、减少往返、增量扫描保证;不是三个同等目的的优化
实例变慢33. SLOWLOG 与延迟排查区分命令执行耗时与客户端端到端等待

场景与实现拓展:按岗位和项目选读#

场景文章入口为什么可以后读
理解存储分工34. Redis 与 MySQL 对比辅助建立概念,已能清楚区分用途时可略读
Redis 内部实现35. SDS、36. 渐进式 rehash实现、存储和性能岗位更重视;一般后端先懂机制与成本,不先背源码常量
集群迁移与多 Key 设计37. MOVED 与 ASK、38. CROSSSLOT 与 Hash Tag使用 Cluster 或排查迁移时重点看,单实例项目优先级较低
接口流量控制39. 限流窗口与令牌桶项目用到限流、网关或分布式设计时升级为重点
Redis 作为消息通道40. Stream 消费与 ACK使用 Stream 时必须理解 PEL 与幂等;不是所有后端岗位都需要专项准备
内存与线上容量治理41. RSS 与内存碎片遇到容量、持久化峰值或运维问题时深入,不必第一轮记所有指标

怎样确认已经形成体系?#

试着不看文章描述一个商品缓存:用什么类型存,读取未命中如何回源,更新时如何删缓存,热点过期如何重建,Redis 不可用如何降级,重启与切主各可能丢什么。能够把这些环节串起来,再解释一个关键并发时序,就比背完目录更有价值。

Key 没有 TTL,是否一定不会消失? 不一定,allkeys 淘汰、主动删除和故障数据丢失都可能影响它,TTL 只是一类生命周期条件。

主节点 AOF 刷盘成功,副本接管就一定保留写入吗? 不一定,副本可能尚未收到;本节点持久化与多节点复制是不同保证。

Lua 原子执行,出错会不会回滚之前的修改? 不会自动按数据库事务回滚。原子执行强调不被普通命令穿插,错误处理与业务幂等仍需设计。

后续复习先选择自己解释不清的分支,再跳到对应专题。能回答主问题但没做过某个高级场景时,明确掌握边界即可,不需要把整个系列一次读完。

Redis 系列导读:知识地图、必会主线与复习顺序
https://blog.xqcherry.top/posts/interview/redis/redis-interview-roadmap/
作者
xqcherry
发布于
2026-10-12
许可协议
CC BY-NC-SA 4.0