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