Skip to content

Redis 面试题集:从六个问题收口 ​

属于 S2 Redis 深入 · 收口篇 上一篇:分布式锁与场景

把 Redis 的高频问题过一遍,每题练到能连续回答三层追问。

Q1:Redis 为什么快? ​

讲出因果链:内存操作定下上限;命令执行单线程(6.0 后网络 IO 多线程)避免了锁竞争;高效数据结构(SDS/跳表/压缩列表)和 IO 多路复用撑起高并发。

追问①:单线程为什么还快? 内存操作 + 无锁竞争,瓶颈通常在网络而非 CPU。追问②:单线程的隐患? 一个耗时命令(如删大 key)会阻塞所有命令。

Q2:RDB 和 AOF 的区别? ​

RDB 是快照(bgsave fork 子进程 + COW,恢复快但可能丢两次快照间的数据);AOF 是追加日志(三种刷盘策略,更安全但文件大)。AOF 重写把无效命令压缩成最小集,混合持久化两者兼顾。

追问:怎么兼顾? 混合持久化——AOF 重写时以 RDB 格式写当前数据,之后增量 AOF 追加。

Q3:穿透、击穿、雪崩的区别与方案? ​

穿透查不存在的数据(空值缓存 / 布隆过滤器);击穿热点 key 过期(互斥锁 / 逻辑过期);雪崩大量 key 同时过期(随机 TTL / 多级缓存 / 限流)。

追问:布隆会误判吗? 会误判"存在",不会漏判"不存在"。

Q4:缓存和数据库怎么保持一致? ​

Cache Aside:读先缓存 miss 回源,写先更新库再删缓存。删缓存失败用延迟双删 / 订阅 binlog 兜底。认清最终一致,做不到强一致。

追问:为什么删缓存不更新缓存? 删更简单,且避免并发写覆盖。

Q5:Redis 分布式锁怎么实现? ​

SET key value NX EX 原子加锁 + 唯一 value;Lua 保证判断删除原子;watchdog 续期;可重入记计数。

追问:主从切换丢锁怎么办? Redlock 多节点,但有争议(依赖时钟、不绝对安全),强一致用 etcd/ZK。

Q6:主从、哨兵、Cluster 的区别? ​

主从 = 数据冗余 + 读写分离;哨兵 = 高可用自动故障转移;Cluster = 分片(16384 槽)+ 高可用。

追问:Cluster 数据怎么分布? CRC16(key)%16384,MOVED 永久重定向、ASK 临时跳转。


自测清单 ​

六题盖住答案能完整讲出推理 + 追问全答上,S2 Redis 就过关了。进入 S3 Kafka。

持续学习,持续构建。