缓存穿透、缓存并发和缓存雪崩

缓存穿透、缓存并发和缓存雪崩是常见的由于并发量大而导致的缓存问题。
缓存穿透通常是由恶意攻击或者无意造成的;缓存并发是由于设计不足;缓存雪崩是缓存同时失效造成的。

缓存穿透
缓存穿透是使用了不存在的key进行大量的高并发查询,导致缓存无法命中,每次缓存穿透后都要去数据库中进行查询,导致数据库压力过大甚至数据库服务被压死。
解决方案
1,将空值也缓存,再次接收到同样的请求,若命中缓存并且值为空,就会直接返回,不会穿透到数据库,避免缓存穿透
2,使用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤;

缓存并发
缓存并发的问题通常发生在高并发场景下,当一个缓存的Key过期时,而访问这个Key的请求量比较大,多个请求同时发现缓存过期,因此多个请求会同时访问数据库来查询最新数据并写回缓存。造成应用和数据库的负载增加。
解决方案
分布式锁:使用分布式锁,保证每个Key同时只有一个线程去查询,其它线程等待。

缓存雪崩
缓存雪崩是大量的key设置了相同的过期时间,导致缓存集中在某一个时间段内失效,给后端数据库造成瞬时的负载升高的压力。
解决方案
对不同的数据采用不同的失效时间。甚至对相同的数据,不同的请求使用不同的失效时间。可以定义一个基础时间,人后加上一个两秒以内的随机数,过期时间为10~12秒,就会避免缓存雪崩。

猜你喜欢

转载自blog.csdn.net/qq_27046951/article/details/82623417