Redis 面试题
目录概述
Redis 的面试重点在于"数据结构 → 持久化 → 缓存策略 → 集群"这条链路的完整闭环,任何一个环节断了都会被追问到崩溃。
这个目录帮你把 Redis 从"缓存工具"提升到"分布式系统组件"的理解层次。
【面试官心理】 我出 Redis 题,通常从数据结构开始:"Redis 有哪些数据类型?Sorted Set 怎么实现的?" 能说出五种数据类型的占 80%,能说出跳表原理的占 30%,能说清楚 Ziplist 和 Quicklist 区别的只有 10%。每一层追问都在淘汰"只会用但不懂原理"的候选人。
内容范围
核心主题
数据结构:
- String:SDS 动态字符串、编码方式(raw、int、embstr)
- List:Quicklist 双向链表、Zipmap
- Hash:Ziplist vs hashtable、压缩列表优势
- Set:IntSet、Hashtable
- Sorted Set:跳表原理、Ziplist vs SkipList
- BitMap:位操作、存储优化
- HyperLogLog:概率算法、PFADD、PFCOUNT
- GEO:地理位置存储、Geohash 算法
持久化机制:
- RDB:快照方式、BGSAVE 原理、配置策略
- AOF:日志追加、fsync 策略(always、everysec、no)、重写机制
- 混合持久化:AOF + RDB、优点与代价
- 数据恢复:启动流程、加载顺序
缓存策略:
- 缓存过期策略:定时删除、惰性删除、定期删除
- 淘汰策略:noeviction、volatile-、allkeys-、LRU、LFU
- 缓存击穿:热点 key 失效、互斥锁、永不过期
- 缓存穿透:恶意请求、布隆过滤器、缓存空值
- 缓存雪崩:大量 key 同时过期、过期时间随机化
- 缓存一致性:Cache Aside、Read Through、Write Through
主从复制:
- 复制原理:全量同步、增量同步、PSYNC 命令
- 主从拓扑:星型、链型、树型
- 复制积压缓冲区:offset 管理
- 故障转移:Sentinel 哨兵机制
集群方案:
- Twemproxy:代理模式、hash tag
- Codis:槽位迁移、分片中间件
- Redis Cluster:16384 槽位、gossip 协议、故障转移
- 集群分片:hash slot、客户端重定向
- 集群扩容:槽位迁移、数据迁移
- 跨机房部署:副本感知、主从切换
分布式锁:
- SETNX + EXPIRE:原子性问题
- SET NX PX:单个命令原子性
- Redlock:多数派共识、时钟漂移
- Redisson:可重入锁、Watchdog
- 锁安全:GC 导致锁失效、时钟回拨
面试题分级
高频必考题 🔴
Redis 数据结构
面试官问:"Redis 的 Sorted Set 怎么实现的?为什么不用红黑树?"
能说出"跳表"的占 60%,能说清楚跳表结构的占 30%,能说出"跳表 vs 红黑树:范围查询优势、内存占用更低"的占 15%,能说清楚 Redis 为什么选择跳表的只有 5%。
【面试官心理】 我问他跳表 vs 红黑树,其实想探查的是:他有没有真正理解过数据结构选型的 trade-off。跳表在范围查询、并发写操作上比红黑树有优势,而 Redis 选择跳表是因为实现简单、性能好。这种设计权衡才是 P6 和 P5 的差距所在。
缓存一致性问题
面试官问:"缓存和数据库怎么保证一致性?"
能说出"Cache Aside"的占 70%,能说出"先更新数据库再删缓存"的占 50%,能说出"缓存删除失败怎么办"的占 20%,能说清楚延时双删、订阅 binlog 方案的只有 5%。
分布式锁
面试官问:"Redis 分布式锁怎么实现?Redlock 靠谱吗?"
能说出"SETNX + EXPIRE"的占 70%,能说出"SET NX PX"的占 50%,能说出"主从切换导致锁丢失"的占 30%,能说清楚 Redlock 多数派原理和时钟漂移问题的只有 10%。
Redis 持久化
面试官问:"RDB 和 AOF 各自优缺点?怎么选择?"
能说出"RDB 快但丢数据、AOF 慢但安全"的占 80%,能说出具体配置策略的占 50%,能说清楚混合持久化优势的占 20%,能根据业务场景给出建议的只有 10%。
中频常考题 🟡
- 主从复制原理
- Redis Cluster 槽位分配
- 内存淘汰策略
- 缓存击穿解决方案
- 集群故障转移
低频了解题 🟢
- Redis 事件模型
- 客户端通信协议
- Redis Module
- Redis 7.0特性
学习路径指引
P5 候选人(校招/初级社招)
先掌握五种数据类型、常用命令、缓存过期概念。能区分缓存和持久化存储的使用场景。这个阶段能正确使用 Redis 即可。
P6 候选人(中级社招)
必须理解 Redis 底层数据结构、持久化机制、缓存策略。熟练掌握 Redis Cluster 或 Redis Sentinel。能针对业务场景设计缓存方案。能处理缓存穿透、击穿、雪崩问题。
P7 候选人(高级/架构方向)
除了原理,必须有分布式系统设计经验。分布式锁、主从复制、集群方案要有实战经验。能讲清楚生产环境遇到的具体问题和排查过程。能设计多级缓存、数据分片等复杂方案。
【面试官心理】 P7 候选人聊 Redis,我通常会问:"你们的缓存架构是怎么设计的?为什么用 Redis 而不是其他缓存?" 能讲清楚架构选型原因的,说明他真正做过大型系统设计。
生产避坑
内存淘汰
Redis 内存达到 maxmemory 后会触发淘汰策略。如果淘汰策略配置不当,可能导致热点数据被淘汰、缓存命中率下降。监控:memory used、evicted keys。
主从切换
主从切换时,如果客户端没有感知,仍然往旧主写入,会导致数据丢失。解决方案:客户端需要支持重定向、故障转移后及时更新路由。
热 key 问题
热点 key(如大 V 微博)会导致单节点压力过大。解决方案:hash tag 打散、读写分离、热点 key 探测与备份。