Redis缓存雪崩/缓存击穿/缓存穿透

一、缓存雪崩:所有请求都到了数据库了,造成DB故障,从而引起所有应用服务器故障

1. 缓存挂了或者缓存服务器重启

2. 手动把所有缓存都删除了(flushall)

3. 缓存没有挂,但预加载的key同时到期,或者集中在某一段时间过期

二、缓存雪崩的解决方法

1. 缓存挂了的情况

a. 事发前:实现redis的高可用性(主从+sentinal+cluster)

b. 事发时:本地内存缓存(二级缓存)+限流(hystrix)

c. 事发后:Redis持久化,重启后从磁盘上加载数据,快速恢复

2. 缓存没挂的情况

预加载时,key的过期时间为随机值,防止同时过期

三、缓存穿透

1. 查询一个不存在的数据,由于没有从数据库里查到,就不放入缓存,所以不存在的数据每次都要到数据库里查询

2. 请求的数据在缓存里大量不命中,导致请求到了数据库,就叫缓存穿透

四、缓存穿透的解决方法

1. 校验参数,对一定不存在的key进行过滤

2. 把空对象也放入缓存,并设置一个较短的过期时间

3. 布隆过滤器

五、缓存击穿

大量请求查询某个key,一直到这个key过期,此时大量请求会落到数据库

六、缓存击穿的解决方法

1. 为单独的key加锁

2. 热点数据永不过期

原文地址:https://www.cnblogs.com/june0816/p/11463036.html