缓存穿透、缓存击穿、缓存雪崩的解决方案

缓存穿透:

应用服务器压力变大,在请求redis时,redis中没有查询到,然后就去查询数据库(应该也无法查到),大量请求打到了数据库上,数据库压力变大导致崩溃。

出现的现象:
1、redis中查询不到数据
2、出现很多非正常的URL请求

解决方案:
1、对空值做缓存:如果查询返回的数据为空,仍然对空值做缓存,设置空结果的过期时间很短,可以防止同一个IP的暴力攻击
2、设置白名单,设置黑名单
3、接口层对IP进行校验

缓存击穿:

缓存中没有的但是数据库中存在数据,使得所有请求都打到数据库上,数据库压力瞬时增大,一般是由于redis中某些热门的key过期,大量请求使用这个key

出现的现象:
1、数据库访问压力瞬时增大
2、redis没有出现大量的key过期
3、redis还是正常的运行

解决方案:
1、预设热门数据,redis访问高峰之前,把热门数据存入到redis中,加大热门数据的key的时长
2、实时监控,哪些热门数据,实时调整key的过期时长
3、加锁(考虑到各种分布式的场景,实际应用也不一样)

缓存雪崩:

在极少的时间段,查询大量的key集中过期

考虑比较完善的方案,分为事前,事中,事后三个方面去解决:
事前:
发生雪崩之前如何避免redis彻底挂掉
redis本身的高可用性,复制,主从架构,操作主节点,读写,数据同步到从节点,一旦主节点挂掉,从节点跟上
双机房部署,一套redis cluster,部分机器部署在一个机房,另一部分部署在另一个机房
还有一种部署方式,两套redis cluster,两套redis cluster之间做一个数据同步,redis集群可以搭建成树状结构一旦单个机房除了故障,另一个机房还可以使用

事中:
redis cluster已经彻底崩溃,已经大量的访问无法访问redis
(1)ehcache本地缓存
做的多级缓存架构,ehcache的本地缓存,应对离散的redis中数据被清掉的现象,另一个主要是预防redis彻底崩溃多台机器上部署的缓存服务实例中的内容,还有一套ehcache的缓存
(2)对redis cluster进行隔离,避免所有的资源占用在访问redis上,在对redis cluster访问失败时部署对应的熔断策略,什么时候redis死了,自动熔断,部署redis cluster的降级策略
(3)对原服务进行访问限流以及资源隔离,减少QPS,不要让资源一直对redis cluster进行请求

事后:
(1)redis数据可以恢复,做了备份,redis的数据备份和恢复
(2)redis数据彻底丢失了,或者数据过旧,快速缓存预热,redis重新启动起来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值