4. 网关缓存与性能优化:本地缓存、分布式缓存、缓存穿透/雪崩/击穿
核心能力:掌握缓存分层设计、热点数据保护、缓存一致性及三高场景下的防御策略。
📊 缓存三大问题与防御策略图
---🎯 面试问答卡片
Q1:网关本地缓存与分布式缓存如何选型?
面试官考察点:缓存分层意识、性能与一致性权衡、对网关场景的理解。
回答框架:分层定位 → 选型对比 → 场景举例 → 一致性策略
示例回答:本地缓存(Caffeine)适合高频只读数据(如路由规则),延迟<1ms,但集群不一致。分布式缓存(Redis)适合共享数据(如 ),支持过期、持久化,但网络开销1-5ms。网关通常本地+分布式两级缓存,本地兜底,Redis回源时异步刷新。
可能追问:① 如何保证两级缓存一致性?② 本地缓存最大容量怎么定?
避坑提醒:不要只说“只用Redis”,网关TPS高时本地缓存可减少90% Redis连接,必须体现分层思想。
Q2:如何预防缓存穿透?
面试官考察点:对穿透原因的分析、布隆过滤器原理、空值缓存细节。
回答框架:原因 → 方案 → 选型对比 → 兜底措施
示例回答:穿透指查询不存在数据绕过缓存直击DB。方案一:布隆过滤器拦截非法key(误判率<1%,需定期重置)。方案二:空值缓存,key-value设为null,TTL 30-60s。网关层结合参数校验和限流,对高频空key自动上报告警。
可能追问:① 布隆过滤器误判如何处理?② 空值缓存大量占用内存怎么办?
避坑提醒:避免只提一种方案;布隆过滤器需结合业务key模式设计,空值缓存必须设置短TTL防内存泄露。
Q3:缓存雪崩与击穿的区别及应对?
面试官考察点:概念辨析、差异化防御、热点数据识别。
回答框架:定义区别 → 雪崩对策 → 击穿对策 → 网关落地
示例回答:雪崩是大批量缓存同时过期导致流量打穿DB,对策:过期时间加随机数(±20%)、多级缓存、限流。击穿是单个热点key失效瞬间高并发,对策:互斥锁(SETNX)只允许一个线程重建缓存,其他等待;或逻辑过期+异步刷新。网关层对热点key自动检测并延长TTL。
可能追问:① 互斥锁等待时间设多少合适?② 如何自动识别热点key?
避坑提醒:不要把雪崩和击穿混为一谈;击穿一定要提“互斥锁”和“逻辑过期”两种主流方案,并对比优缺点。
📁 项目案例:统一网关缓存治理平台
| 项目名称 | 统一网关缓存治理平台 |
| 业务背景 | 网关承载公司80%南北向流量,缓存命中率仅70%,多次因缓存穿透/雪崩导致DB打挂。 |
| 规模指标 | 日均请求20亿,峰值QPS 50万,缓存节点50台(本地Caffeine + 集群Redis),DB查询降低90%。 |
| 技术栈 | Caffeine + Redis Cluster + 布隆过滤器(Guava) + Sentinel限流 + Nacos配置中心 |
| 核心难点 | ① 热点key动态识别与自动降级;② 两级缓存一致性(最终一致);③ 布隆过滤器误判导致正常请求被拦截。 |
| 面试高频追问 | 1. 热点key检测算法(滑动窗口计数 vs LRU); 2. 缓存一致性如何保证(MQ异步通知刷新本地缓存); 3. 布隆过滤器重置策略(定长bitmap + 定时重建) |
| 可迁移话术 | “我们采用本地缓存+分布式缓存两层架构,通过配置中心动态调整TTL和限流阈值;对热点key使用预热+手动过期+互斥锁三重保护,确保网关高可用。” |
📌 项目STAR结构化表达
面试贴士:项目案例 STAR 图帮助你快速构建回答结构,面试时按“背景-任务-行动-结果”展开,每个节点用 3 个关键词锚定记忆点。
📋 缓存策略对比表
| 策略 | 适用场景 | 优点 | 缺点 | 网关推荐 |
|---|---|---|---|---|
| 本地缓存(Caffeine) | 路由规则、限流配置 | 极低延迟、无网络开销 | 集群不一致、容量有限 | 只缓存静态/低频修改数据 |
| 分布式缓存(Redis) | 会话、热点数据 | 高可用、持久化、共享 | 网络延迟、单点瓶颈 | 搭配本地缓存做两级 |
| 布隆过滤器 | 防穿透 | 内存占用小 | 误判、不支持删除 | 针对非法key场景 |
| 多级缓存 | 雪崩/击穿 | 高可靠、分层防护 | 一致性维护复杂 | 网关标配架构 |
高频考点:请务必掌握布隆过滤器的位图原理、互斥锁的 SETNX 与 Lua 脚本结合、以及本地缓存的 Caffeine 淘汰策略(W-TinyLFU)。