缓存穿透、击穿、雪崩

缓存穿透

key对应的数据在数据源中并不存在,每次针对此key的请求从缓存中获取不到,请求都会压到数据源,从而可能压垮数据源。

比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。


解决方案

  1. 对空值缓存
  2. 设置白名单
  3. 采用布隆过滤器
  4. 进行实时监控

缓存击穿

key对应的数据存在,但在redis中过期,此时又有大量的并发请求,而这些请求发现缓存过期又会从DB中加载并设到缓存,这个时候可能会把DB压垮


解决方案

  1. 预先设置热门数据
  2. 调整时长
  3. 使用同步锁,在缓存失效并且面对大量请求时,只让一个请求去数据库请求数据并设到缓存中,其他请求等待这个请求缓存后的结果。

缓存雪崩

在缓存击穿的基础上有更多的key值过期


解决方案

  1. 多级缓存架构 nginx缓存 + redis缓存 + 其他缓存
  2. 使用锁或队列,让请求在可承受范围内访问DB,并设到缓存中方便其他请求使用
  3. 将缓存失效时间分散开

缓存穿透、击穿、雪崩
https://huajframe.github.io/2022/01/24/数据库/非关系型数据库/缓存穿透、击穿、雪崩/
作者
HuaJFrame
发布于
2022年1月24日
许可协议