redi缓存穿透、击穿、雪崩故障现象及解决方案

目录

一、redis缓存

二、redis缓存击穿

1、故障现象

2、处理方案 

三、缓存雪崩

1、缓存雪崩现象

2、处理方案

四、redis 缓存穿透

1、缓存穿透现象

2、处理方案


一、redis缓存

  正常流程:

1、redis缓存中存在客户查询内容:客户需求 ——>①——>②结束查询

2、redis缓存中无,但是数据库中存在: 客户需 ——>③——>④——>⑤——>②结束查询

3、redis缓存中无,数据库中也无:客户需 ——>③ ——>⑥ ——>⑦结束查询

二、redis缓存击穿

1、故障现象

当高并发时,当以一个KEY非常热点(类似爆款),在不停的扛着大并发,当这个KEY在失效的瞬间,持续的大并发就击穿缓存,直接请求数据并更新到缓存中,导致性能下降。

 

当用户访问数据A时,redis缓存中存在则直接访问redis,此时,数据A一直处于高并发状态,然而此时redis的key失效了,持续的高并发击穿redis缓存,直接进入MySQL进行访问,当第一个访问达到mysql访问之后,MySQL会更新到redis,处于高并发状态时,会有数条访问击穿访问mysql,同时并更新到数据库A,浪费资源。导致新能下降。

2、处理方案 

加锁进行排队:当高并发发生时,突然redis中的key过期了,在redis中没有查询到相关数据时,给他加一个同步锁(进程锁),一次只允许一个线程通过,其他的线程会阻塞在外面, 第一个线程访问MySQL访问之后,数据会更新到redis中,后面的进行访问时,就是直接访问redis,而不会同时击穿redis,访问MySQL。

三、缓存雪崩

1、缓存雪崩现象

缓存集中过期或者缓存服务器宕机了,导致大量数据访问数据库,造成数据库压力过大宕机

2、处理方案

事前:采用高可用缓存。防止出现整个缓存故障。即使个别节点,机器甚至机房都关闭,系统仍然可以提供服务,Redis 哨兵(Sentinel) 和 Redis 集群(Cluster) 都可以做到高可用。

事中:缓存降级。当访问次数急剧增加导致服务出现问题时,可以采用 Hystrix,它通过熔断、降级、限流三个手段来降低雪崩发生后的损失。

事后:Redis备份和快速预热:Redis数据备份和恢复、快速缓存预热。

四、redis 缓存穿透

1、缓存穿透现象

redis中不存在查询的数据,同时mysql中也不存在,正常情情况下,这种情况是属于正常的,但当有大量的不存在的数据请求时,就有可能是黑客攻击,不停的访问数据库。高并大,导致服务器宕机。

2、处理方案

缓存空数据:当来访的,在redis中没有查询后,在mysql也没查询到,此时,给他缓存一个空对象到redis中,并设置一个随机的过期时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值