缓存穿透、缓存击穿、缓存雪崩概念及解决方案

1、缓存穿透

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

解决方案
采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤;
访问key未在DB查询到值,也将空值写进缓存,但能够设置较短过时时间。数据库

2、缓存雪崩

概念
大量的key设置了相同的过时时间,致使在缓存在同一时刻所有失效,形成瞬时DB请求量大、压力骤增,引发雪崩。缓存

解决方案
能够给缓存设置过时时间时加上一个随机值时间,使得每一个key的过时时间分布开来,不会集中在同一时刻失效。分布式

3、缓存击穿

概念
一个存在的key,在缓存过时的一刻,同时有大量的请求,这些请求都会击穿到DB,形成瞬时DB请求量大、压力骤增。svg

解决方案
在访问key以前,采用SETNX(set if not exists)来设置另外一个短时间key来锁住当前key的访问,访问结束再删除该短时间key。.net

4、分布式锁实现

1)基于数据库实现分布式锁;
2)基于缓存(Redis等)实现分布式锁;
3)基于Zookeeper实现分布式锁;xml