缓存击穿、缓存穿透、缓存雪崩
参考文章:缓存穿透、缓存击穿、缓存雪崩概念及解决方案
一. 缓存击穿
1. 概念
缓存击穿指的是大量的请求同时查询一个 key 时,此时这个key正好失效了,所有请求击穿到后端数据库系统进行查询,使数据库压力过大,甚至使数据库服务被压死。
2. 解决方案
- 直接加锁:当缓存未命中,则从数据库获取数据并更新到缓存中;
- 定时任务:定时刷新缓存;
- 多级缓存:一级缓存失效时间短,二级缓存失效时间长,一级缓存未命中时对 key 加锁,从数据库获取到数据更新到缓存并释放锁,后面线程从二级缓存获取数据;
二. 缓存穿透
1. 概念
访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。
2. 解决方案
- 采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤;
- 第一次在DB查询不到时,在缓存中为这个key的缓存一个空值,下次直接返回;
三. 缓存雪崩
1. 概念
大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。
2. 解决方案
可以给缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效。
如果文章对您有所帮助,可以点一下推荐