Redis击穿、穿透、雪崩以及解决方案

击穿

描述:
发生击穿的前提一定是产生了大量的并发,并且Redis中数据过期,导致所有请求去数据库查,引起数据库压力瞬间增大

解决方案
1.阻止所有请求都去请求数据库
2.Redis是单进程,单实例,所以可以使用setnx()当做互斥锁
3.避免出现死锁,对锁加个过期时间
4.避免时间过了,但拿到锁的线程还没执行完任务,其他线程又拿到锁也去执行任务,需要再加个线程去监控拿到锁的线程有没有执行完任务,时间过了但没执行完任务就刷新过期时间

穿透

描述
客户端发送的查询请求都是数据库没有的请求,导致服务器浪费大量的资源去处理那些无效的请求

解决方案
可以加一个过滤器过滤掉无效的请求,例如使用布隆过滤器,但布隆过滤器的不能删除已经记录的值,可以使用布谷鸟过滤器

雪崩

描述
击穿是一个数据出现过期,雪崩是大量的数据过期,导致大量的请求到达数据库

解决方案
1.对于时点性不强的数据,让key分散过期时间
2.对于时点性强的数据,例如统一零点过期,在业务逻辑中加延时判断

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值