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 导致锁失效、时钟回拨

面试题分级

级别考察重点期望回答判分标准
P5数据类型、持久化概念、基础命令能背出基本概念,不怵简单追问表面正确
P6底层数据结构、缓存策略、集群原理能回答追问,理解底层原理深度过关
P7分布式锁、生产问题、架构设计有实战案例,能做 trade-off经验闭环

高频必考题 🔴

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 探测与备份。

导航指引