缓存穿透、击穿、雪崩
缓存穿透
key对应的数据在数据源中并不存在,每次针对此key的请求从缓存中获取不到,请求都会压到数据源,从而可能压垮数据源。
比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。
解决方案
- 对空值缓存
- 设置白名单
- 采用布隆过滤器
- 进行实时监控
缓存击穿
key对应的数据存在,但在redis中过期,此时又有大量的并发请求,而这些请求发现缓存过期又会从DB中加载并设到缓存,这个时候可能会把DB压垮
解决方案
- 预先设置热门数据
- 调整时长
- 使用同步锁,在缓存失效并且面对大量请求时,只让一个请求去数据库请求数据并设到缓存中,其他请求等待这个请求缓存后的结果。
缓存雪崩
在缓存击穿的基础上有更多的key值过期
解决方案
- 多级缓存架构 nginx缓存 + redis缓存 + 其他缓存
- 使用锁或队列,让请求在可承受范围内访问DB,并设到缓存中方便其他请求使用
- 将缓存失效时间分散开
缓存穿透、击穿、雪崩
https://huajframe.github.io/2022/01/24/数据库/非关系型数据库/缓存穿透、击穿、雪崩/