缓存击穿、缓存穿透、缓存雪崩

参考文章:缓存穿透、缓存击穿、缓存雪崩概念及解决方案

一. 缓存击穿

1. 概念

  缓存击穿指的是高并发情况下在缓存中查询时该资源不存在,导致缓存无法命中,所有请求击穿到后端数据库系统进行查询,使数据库压力过大,甚至使数据库服务被压死。

2. 解决方案

  1. 直接加锁:当缓存未命中,则从数据库获取数据并更新到缓存中;
  2. 定时任务:定时刷新缓存;
  3. 多级缓存:一级缓存失效时间短,二级缓存失效时间长,一级缓存未命中时对 key 加锁,从数据库获取到数据更新到缓存并释放锁,后面线程从二级缓存获取数据;

二. 缓存穿透

1. 概念

  访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。

2. 解决方案

  1. 采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤;

三. 缓存雪崩

1. 概念

  大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。

2. 解决方案

  可以给缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效。

猜你喜欢

转载自www.cnblogs.com/virgosnail/p/9789927.html