第3章:缓存基础知识面试题——数据结构、过期策略、持久化机制

本章是分布式缓存研发工程师面试的基石考点。面试官会从底层数据结构实现、过期删除策略、持久化机制三个维度考察你对缓存中间件的理解深度。掌握这些基础,才能在后续深入问答中展示扎实的内功。

核心策略:回答时遵循“底层原理 + 使用场景 + 优缺点对比”三步框架,避免死记硬背。
缓存核心考点 数据结构 过期策略 持久化机制 回答原则与注意事项

面试问答卡片

面试问题:Redis 中常用的数据结构有哪些?请说明底层实现。

面试官考察点:是否理解每种数据结构的底层编码(SDS、压缩列表、跳表等),以及何时切换。

回答框架:列举 5 种 → 分别说明底层结构(如 String 用 SDS)→ 补充动态转换条件(如 Hash 何时用 ziplist)→ 说明适用场景。

示例回答:Redis 有 String、List、Hash、Set、ZSet。String 底层 SDS 保证二进制安全;List 用 quicklist(3.2+);Hash 元素少时用 ziplist,多时用 hashtable;Set 用 intset 或 hashtable;ZSet 用 ziplist 或 skiplist + hashtable。数据量增长时会自动转换。

可能追问:为什么 ZSet 同时用跳表和哈希表?压缩列表转 hashtable 的阈值是多少?

避坑提醒:不要只背名字,要说出底层结构名称(如 SDS、quicklist)及转换条件;避免说“Redis 内部是数组”等错误表述。

面试问题:Redis 的过期策略有哪些?如何选择?

面试官考察点:对主动/被动删除机制的理解,以及性能和内存的平衡。

回答框架:三种策略(定时、惰性、定期)→ 说明 Redis 采用惰性+定期组合 → 结合 maxmemory 淘汰策略说明完整方案。

示例回答:Redis 使用惰性删除(访问时检查)和定期删除(每 100ms 随机抽样检查)组合策略。惰性删除节省 CPU 但可能积累过期 key;定期删除控制内存但不会 100% 扫描。当内存超限时,配合 allkeys-lru 等淘汰策略,保证热点数据。

可能追问:定期删除每次扫描多少 key?如果大量 key 同时过期怎么处理?

避坑提醒:不要只答一种策略,必须说出“惰性+定期”组合;注意区分“过期删除”和“内存淘汰”两个概念。

面试问题:Redis 持久化机制 RDB 和 AOF 的区别及适用场景?

面试官考察点:对数据安全、性能、恢复速度的权衡理解。

回答框架:分别说明 RDB(快照)和 AOF(写日志)原理 → 对比优缺点 → 引入混合持久化 → 给出场景建议。

示例回答:RDB 通过 fork 子进程生成快照,文件小恢复快,但可能丢失最后一个快照后的数据。AOF 记录每次写操作,根据 fsync 策略(1s/每次写)保证数据,但文件大恢复慢。Redis 4.0 混合持久化:RDB 做全量,AOF 记录增量,兼顾速度与安全。关键业务推荐混合持久化。

可能追问:AOF 重写过程?同时开启 RDB 和 AOF 加载顺序?如何选择持久化方案?

避坑提醒:不要忽略混合持久化;区分 RDB 的 fork 开销和 AOF 的 IO 开销;明确说清楚 AOF 的三种 fsync 策略。

知识结构表格

考点类别 子项 核心要点 面试高频坑
数据结构 String SDS,二进制安全,预分配 误以为 C 字符串
List quicklist(linkedlist + ziplist) 仍说双向链表
ZSet skiplist + hashtable 忽视跳表实现细节
过期策略 定时删除 CPU 高,不实用 以为 Redis 采用此策略
惰性删除 访问时检测,内存浪费 忽略内存淘汰配合
定期删除 随机抽样,平衡 CPU/内存 误以为全量扫描
持久化机制 RDB fork 子进程快照,恢复快,可能丢数据 忽略 fork 对内存的影响
AOF 追加日志,三种 fsync 策略,重写机制 不区分 appendfsync 参数
💡 面试建议:将表格中的对比关键词融入你自己的项目经验中,例如“我在某支付系统用过 ziplist 优化小 Hash 内存”,让回答更有亮点。