redis缓存雪崩、缓存穿透、缓存击穿的场景和解决手段

一、缓存雪崩

场景
1、redis宕机
2、redis大规模的key失效

解决方式
1、事前:对redis做高可用(哨兵或者cluster)
2、事中:做多级缓存,例如:ehcache做为一级缓存,redis做二级缓存;针对直接走数据库的请求进行限流与降级
3、事后:开启redis持久化,当redis重启后可以快速恢复数据
4、缓存中的key过期时间设置的尽量均匀点,不让其发生同一时间大规模的key失效,或者针对热点数据甚至永不过期

二、缓存穿透

场景

黑客恶意攻击,针对缓存不存在的key和数据库不存在的数据进行高并发访问,导致数据库宕机

解决方式

1、针对id为负数时(一般id都设为自增主键),在接口层就进行过滤
2、当一个请求在缓存和数据库都不存在时,在缓存中进行一个记录(key,null),设置短一点的过期时间。

但是不推荐这样做,可能黑客每次模拟的场景都不一致,这样做法就没有太多意义,反而增加缓存无效数据量;而且这样做针对不存在的key已经在缓存中记录下来了,后续又在数据库中加入了该条数据,就会导致数据的不一致

3、是用布隆过滤器,将缓存和数据库中的条件key或者字典放入布隆过滤器中,当请求过来时先先去过滤器中查询是否存在数据,存在走后续流程,不存在直接返回,起到一个很好的过滤作用

三、缓存击穿

场景

当缓存中某个key失效时,大批量的请求过来发现缓存不存在,就直接去访问了数据库,导致数据库直接宕机

解决方式

1、缓存中针对热点数据设置永不失效
2、使用互斥锁(单体)或者分布式锁(分布式场景下)进行一个加锁,第一个请求查询数据库并将数据放入缓存,最后再释放锁,这样后面的请求就可以直接从缓存中获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值