面试官刚抛出"说说Redis缓存穿透、雪崩、击穿的区别和解决方案",就开始背模板:"穿透是查不存在的数据,雪崩是大量缓存失效,击穿是热点key过期......" 话没说完就被打断:"停,你说的都是百度来的,有没有结合实际项目?"我想说:这三个问题是Redis面试的"必考点",但绝不是"送分题"。面试官真正想听的,是你对这三个问题的底层逻辑理解、实战排查经验,以及解决问题的系统性思维。
一、缓存穿透:为什么"查无此数据"会拖垮数据库?面试官在挖你的"防御性思维"
场景还原:
某电商大促时,用户突然大量请求"查询ID为-1的商品详情"。由于数据库中没有这个ID,Redis里也没有缓存,每个请求都直连数据库。10分钟内,数据库QPS从5000飙升至5万,最终触发连接池耗尽,服务整体宕机。
面试官的深层追问:
- "为什么会出现缓存穿透?仅仅是因为恶意请求吗?"(考察问题根源认知)
- "如果用布隆过滤器,如何避免误判?内存占用怎么控制?"(考察技术选型深度)
- "如果数据库里确实有少量无效key(比如已删除的商品),布隆过滤器会漏放吗?怎么处理?"(考察边界条件思考)
面试官认可的回答逻辑:
缓存穿透的本质是"无效请求绕过缓存,直接冲击数据库",根源可能是:
- 恶意攻击(如批量请求不存在的key);
- 业务逻辑漏洞(如前端传参错误生成无效key);
- 缓存与数据库数据不一致(如数据库删除了数据,但缓存未清理)。
解决方案要分层次:
- 第一层:前置校验(业务层):在请求入口拦截无效key(如商品ID必须符合正则规则),从源头减少无效请求;
-