Java面试-17:介绍一下 Redis 缓存穿透、击穿、雪崩,及处理方案?

1. 缓存穿透

请求查一条根本不存在的数据

缓存里没有,数据库里也没有,请求直接穿透缓存打库。

一直查就会把数据库干崩。

解决:

  • 空结果也缓存,设个短过期时间

  • 加布隆过滤器,提前判断数据存不存在

  • 接口做参数校验、限流

2. 缓存击穿

一个热点 Key 突然过期了,一瞬间大量请求同时查这个 Key。

缓存没了,全部冲数据库,数据库扛不住。

解决:

  • 热点 Key 永不过期

  • 加互斥锁,只让一个线程去查库更新缓存

  • 提前异步刷新缓存

3. 缓存雪崩

大批量缓存同时过期,或者 Redis 直接挂了。

所有请求一起打数据库,数据库直接雪崩宕机。

解决:

  • 给过期时间加随机值,避免同时失效

  • 搭建 Redis 集群,主从 + 哨兵

  • 加多级缓存(本地缓存 + Redis)

  • 服务降级、限流、熔断

Java面试-16:字符串常量池的作用了解吗? 2026-03-24
Java面试-18:介绍一下MySQL有那些索引类型? 2026-03-25

评论区