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。