缓存穿透、缓存击穿与缓存雪崩
缓存穿透
概念
访问一个缓存中不存在的key,请求会打到db上,流量大时db会挂掉;
解决方案
1.使用布隆过滤器,用于存储可能访问的key,不存在的key直接被过滤;
2.访问key未在db查询到值,但还是将空值写入缓存,但可以设置较短的过期时间;
缓存击穿
概念
一个缓存中存在的key,在缓存过期的一刻,存在大量访问请求,这些请求都会击穿到db,造成db访问量剧增,db压力增加;
解决方案
在访问key之前采用setnx来设置另一个短期key来锁住当前Key的访问,访问结束以后再删除该短期key;
缓存雪崩
概念
大量的key设置了相同的过滤时间,导致在缓存中同一时刻全部失效,造成瞬时db压力剧增,引起雪崩;
解决方案
在给缓存加上过期时间时可以额外加上一个随机时间,使得每个Key的过期时间分布开来,不会集中在同一时刻失效;