缓存穿透,缓存击穿,缓存雪崩以及解决方案

2020-06-19  本文已影响0人  明月几何8

一、缓存穿透

缓存穿透是指查询一个一定不存在的数据,对于redis如果从存储层查不到数据则不会写入缓存,这就会导致这个不存在的数据每一次的请求都会到存储层去查询,这样就失去了缓存的意义,在流量大的时候,可能DB就挂掉了。如果有人利用不存在的key去频繁的攻击我们的应用,这就是漏洞。

解决方案

有很多方案可以有效的解决缓存穿透

二、缓存雪崩

缓存雪崩是指我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。

解决方案

将缓存的失效时间分散开,比如我们可以在原有的时间的基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引起集体失效的事件。

缓存击穿

对于一些设置了过期时间的key,如果这些key可能会在某些时间点被超高并发地访问,是一种非常“热点”的数据,这时候就要考虑缓存击穿的问题,和缓存雪崩的区别在于这里针对某一个key的缓存,前者则是很多key。
缓存在某个时间点过期的时候,恰好这个时间点对这个key 有大量的并发请求过来,这些请求发现缓存过期后一般都会从DB加载数据并设到缓存,这个时候并发的请求可能会瞬间把后端DB压垮。

解决方案

原文出自:https://blog.csdn.net/zeb_perfect/article/details/54135506

上一篇下一篇

猜你喜欢

热点阅读