缓存穿透#
定义: 访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。
解决方案:
- 缓存空值 (值少时)
- 布隆过滤器, 特性: 没有的肯定没有,有的不一定有
缓存击穿#
定义:并发性,一个存在的key,在缓存过期的一刻,同时有大量的并发请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。
解决方案:
- 分布式锁,在访问key之前,采用分布式锁SETNX(set if not exists)来设置另一个短期key来锁住当前key的访问,访问结束再删除该短期key
缓存雪崩#
定义:大量的key设置了相同的过期时间,或者某台服务器宕机,导致大量缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。
解决方案:
- 将key的过期时间设置时添加一个随机时间,分散过期时间
- 如果是热点key,可以加分布式锁,减少并发量
- 二级缓存(本地缓存),减少db压力