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

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

一. 缓存击穿

1. 概念

  缓存击穿指的是大量的请求同时查询一个 key 时,此时这个key正好失效了,所有请求击穿到后端数据库系统进行查询,使数据库压力过大,甚至使数据库服务被压死。

2. 解决方案

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

二. 缓存穿透

1. 概念

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

2. 解决方案

  1. 采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤;
  2. 第一次在DB查询不到时,在缓存中为这个key的缓存一个空值,下次直接返回;

三. 缓存雪崩

1. 概念

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

2. 解决方案

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

原文地址:https://www.cnblogs.com/virgosnail/p/9789927.html