redis缓存穿透、击穿、雪崩

缓存穿透: 是指用户请求到redis没有,然后查询数据库,这条数据数据库也不存在,如果有大量的请求过来,这样的话会给我们数据库造成很大的压力;

解决方法:

1、缓存空key并且设定过期时间; 这样的话能防止一部分问题,那么如果有用户恶意请求,每次请求的key都不同,根据我们的逻辑是key数据库不存在,则添加一个空对象,这样的话短时间会导致我们redis数据暴增;

2、数据暴增的话可以使用布隆过滤器(对可能查询的数据先用hash存储),最后将空key缓存到redis中;

3、对于这种请求可能是遇到网络攻击,我们可以对请求进行身份鉴权、数据合法行校验等;

击穿:缓存击穿是在某个时间同时又多个请求打过来,此时我们缓存的key过期了,这次多次请求会打到我们数据库,这样导致缓存的击穿;

解决方法:1、设置缓存永不过期;

2、 加互斥锁,使用分布式锁,保证每个key只有一个线程去查询后端服务,而其他线程为等待状态。这种模式将压力转到了分布式锁上

雪崩:缓存雪崩是某个时间内有多个缓存key过期,redis宕机;

解决方法:打乱过期时间,避免同时过期,双缓存,添加互斥锁;

redis缓存穿透、击穿、雪崩_第1张图片

你可能感兴趣的:(redis,redis,缓存,数据库)