作者:Yafei2702933480 | 来源:互联网 | 2023-06-15 08:01
目录一、redis缓存二、redis缓存击穿1、故障现象2、处理方案三、缓存雪崩1、缓存雪崩现象2、处理方案四、redis缓存穿透1、缓存穿透现象2、处理方案一、
目录
一、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中,并设置一个随机的过期时间。