缓存设计

进阶预计进阶 2-3 个月

星团 后端

学习定位零前置,可直接入门→ 缓存设计 →学完本技能可衔接的下游技能建设中

岗位需求

1 核心 · 0 加分

在职岗位将其列为技能要求

核心岗位薪资带

23k-50k

核心要求岗位的月薪区间

需求趋势

上升 1稳定 0收缩 0

核心要求岗位的趋势分布

面试题库

高频真题 · 参考答案随题展开
1. 缓存穿透、击穿、雪崩分别是什么?如何应对?

穿透是查询根本不存在的数据,缓存与数据库都无值,请求全打到库,常见于恶意 id 扫描;对策为空值缓存(短 TTL)、布隆过滤器前置拦截、接口层参数校验与限流。击穿是某个热点 key 恰好过期的瞬间,大量并发同时回源压垮数据库;对策为互斥锁(只放一个请求回源重建,其余等待)、热点 key 逻辑过期(物理不过期,值内带过期时间异步刷新)、热点提前预热。雪崩是大批 key 同时过期或缓存实例整体宕机导致流量整体落到数据库;对策为过期时间加随机抖动、多级缓存与集群高可用、熔断降级与队列限流兜底。答题先用一句话区分三者(个体不存在、个体失效、群体失效),再分别给两三种手段,能提到布隆过滤器误判率与逻辑过期的实现细节更佳。

2. Cache Aside 模式如何工作?缓存一致性怎么保证?

读路径先查缓存,命中返回;未命中查库、写缓存再返回。写路径是经典争议点:先更新库再删缓存(Cache Aside 标准做法)是主流——删而不是更新缓存避免并发写覆盖与懒加载浪费,删失败可用重试队列或订阅 binlog(Canal)异步补偿;先删缓存再更新库在删后读的窗口会把旧值重新写入缓存造成长期脏读,需延迟双删缓解仍有竞态。即便先更库后删缓存,极端时序(读请求在库更新前读到旧值、又在删除之后才写缓存)仍可能不一致,可用延迟双删、设置 TTL 兜底最终一致、或写请求串行化。要求强一致就不该用缓存或用读写锁代价换。能讲清「删优于更」的理由与延迟双删的时序图即优秀。

3. 常见缓存淘汰策略有哪些?Redis 支持哪些?

通用算法:FIFO 先进先出实现简单但可能淘汰热点;LRU 淘汰最久未用,局部性友好,链表加哈希表 O(1) 实现,但对偶发批量扫描不鲁棒;LFU 淘汰访问频率最低,抗扫描与热点稳定,但要维护计数且对新键不友好(需衰减机制);ARC 与 LIRS 是折中改进。Redis 的 maxmemory-policy 提供八种:noeviction 写报错、allkeys-lru、allkeys-lfu、allkeys-random、volatile 加三种只在带 TTL 的键中淘汰;Redis 的 LRU 是近似实现(采样若干候选淘汰其中最旧)以省内存,LFU 用对数计数器加衰减。选型:缓存场景用 allkeys-lru 或 lfu,既有缓存又有不可丢数据时分开实例部署。能讲 Redis 近似 LRU 的采样思想与 LFU 衰减即加分。

4. Redis 为什么这么快?

纯内存操作是根本,单次命令微秒级;IO 模型上,单线程命令执行避免锁与上下文切换,配 IO 多线程(读写与协议解析并行,命令仍串行)加 epoll 事件循环吞吐可观;数据结构专为内存设计(SDS、跳表、紧凑列表 listpack、渐进式 rehash 的字典),按数据规模选编码(小 zset 用紧凑结构);高效协议 RESP 简单解析省 CPU;还有 pipeline 与 mget 这类批量命令摊薄往返。答题要澄清「单线程」指命令执行线程,后台线程做持久化刷盘与关闭文件等慢操作,4.0 后有 lazy-free 异步释放大对象。对比 memcached 的多线程,Redis 单线程简化了数据结构竞争但受限于单核,大 value 与慢命令(keys、大集合全量操作)会阻塞所有请求,生产禁用。能展开阻塞点与替代命令即优秀。

5. 多级缓存(本地缓存加分布式缓存)如何设计一致性?

架构上请求先查进程内本地缓存(Caffeine、Guava Cache),再查 Redis,最后回源,多层分摊热点流量与网络开销,本地层可扛住单 key 数十万 QPS。难点在失效广播:本地缓存在各实例各有一份,数据更新只删 Redis 不够,其他实例的本地副本仍是旧值。方案:发布订阅失效通知(Redis pub/sub 或 MQ)广播删除事件,各实例收到后清自己的本地键,注意消息丢失兜底靠短 TTL;或集中式版本号,值带版本、本地比对 Redis 版本不一致即失效;退一步用极短本地 TTL 接受秒级不一致。还要防本地缓存无界膨胀(容量加 LRU)与雪崩联动(本地过期同时打向 Redis 需加抖动)。能指出失效广播丢失的兜底这条即体现实战。

🔒 解锁完整面试题库与参考答案(Pro)

含高频追问与作答要点,系统准备面试。

官方文档

1 条

推荐教程

2 条

推荐课程

1 条

上手实践

1 条

🔒 完整前置链分析 + 逐岗位引用明细

本页已免费展示学习定位与市场聚合;Pro 深读补齐完整前置依赖链分析与逐岗位引用明细 (核心/加分与深度档、岗位画像)。

知识分享

社区经验 · 管理员审核后展示

暂无分享——第一个来聊聊你的经验和踩坑吧。

有经验想分享?登录后可提交你的知识分享,管理员审核通过后将署名展示。

难度档决定星等与难度分权重(入门 1 / 进阶 2 / 精通 3);学习资源由编辑部遴选并持续维护, 经验心得欢迎在上方「知识分享」区署名分享。