缓存穿透就是请求你缓存中不存在的数据从而请求直达数据库 也可能存在恶意攻击 比如请求id是-1 数据库中不存在大多数 空数据不会进行缓存 这样就会造成请求一直到数据库了,解决方法就是采用布隆过滤器直接过滤掉-1这种不会存在的请求返回空 亦或者把这些空数据也进行短时间的缓存。
缓存击穿 就是你的热点key(经常被读取的的数据缓存)失效了 大量的高并发请求打到数据库造成的负载升高,解决办法常用的就是设置永不过期key 然后新数据更新这个key还有就是加锁确保只有一个线程去请求数据库查数据更新缓存,还有一个缓存预热 系统启动之前进行热点数据优先缓存
缓存雪崩和击穿有点相似就是key失效 只不过这个是大面积的同时失效 应对方法就是避免key设置统一时间过期然后缓存定期持久化确保缓存快速恢复
缓存穿透发生在请求查询的数据不在缓存中,同时数据库也无此数据时。恶意攻击,例如频繁请求数据库中不存在记录(例如ID为-1),可导致每次请求直击数据库,增加其负担。
当热点键(频繁访问的缓存项)过期时,遭遇高并发请求,所有请求绕过缓存直接访问数据库,可能引起数据库负载激增。
大量缓存同时失效,导致所有请求直接命中数据库,类似于缓存击穿但影响更广泛,可能导致系统崩溃。
本文作者:周得水
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!