后端岗位面试题更新 2026-08-05

请阐述Redis中缓存击穿、缓存穿透和缓存雪崩各自的定义、成因及典型应对策略。

后端开发风险判断技术原理Redis

考察说明

考察对Redis缓存三大异常场景的理解及解决方案的掌握程度。

回答思路

  1. 【回答框架 1】缓存穿透指查询一个不存在的数据,由于缓存中无该数据,请求直接打到数据库,可能压垮数据库。常见解决方案包括布隆过滤器拦截不存在请求,或者缓存空值并设置较短过期时间,但要注意空值缓存的一致性。
  2. 【回答框架 2】缓存击穿是指某个热点key在缓存过期瞬间,大量并发请求同时访问该key,直接访问数据库。常用方案有互斥锁(如Redis的setNX)只允许一个线程重建缓存,其他线程等待;或热点数据设置逻辑过期、主动刷新等。
  3. 【回答框架 3】缓存雪崩是指在某一时刻大量缓存key同时失效或Redis服务不可用,导致大量请求直接到达数据库。应对策略包括缓存key的过期时间设置随机化以避免同时失效,使用多级缓存,以及Redis集群或哨兵保障高可用,同时配合限流和降级保护数据库。
  4. 【回答框架 4】在回答时,需明确这三种情况的区别:穿透是数据本身不存在,击穿是单个热点key过期,雪崩是大量key同时失效或服务故障。解决方案要针对不同原因选择,并注意实施中的关联风险。
  5. 【关键点 1】缓存穿透:查询不存在数据,解决方案为布隆过滤器或缓存空值。
  6. 【关键点 2】缓存击穿:热点key过期瞬间并发请求,解决方案为互斥锁或逻辑过期。
  7. 【关键点 3】缓存雪崩:大量key同时失效或Redis宕机,解决方案为过期时间随机化、多级缓存、高可用架构及限流降级。
  8. 【易错点 1】将缓存穿透与击穿概念混淆,穿透针对不存在的数据,击穿针对存在但过期的热点key。
  9. 【易错点 2】使用互斥锁时若未设置合理超时时间,可能导致死锁或长时间阻塞,影响性能。
  10. 【易错点 3】缓存空值虽然简单,但若设置永久过期可能导致脏数据,需考虑短过期时间及后续更新策略。