什么是缓存雪崩、穿透、击穿?及其解决方案

缓存雪崩:

大量redis缓存在同一时间全部失效,导致大量请求全部打到数据库,导致数据库挂掉

解决方案:设置缓存的失效时间,让其不要在同一时间失效,而是随机初始化其失效时间。对于热点key,redis一般是集群部署,把这些热点key放到不同节点上,让这些热点缓存平均分布在不同redis缓存节点上,或者设置热点key永久不失效(很暴力)


缓存穿透:

是指缓存和数据库中都没有的数据,一般常见于黑客攻击。比如用请求id = -1的数据,这种数据直接穿透缓存打到数据库上,导致数据库挂掉

解决方案:

  • 当请求穿透redis直接到数据库,数据库无论查出什么结果(空或者有值)都会缓存到redis里去,下次对方用同一个参数发送请求时,就不会穿透redis
  • 但是下一次可能会换不同的参数,可以直接将此ip拉黑
  • 对方也可能换不同的ip,对参数的合法性进行校验,再判断这个参数不合法时,直接return掉
  • 使用布隆过滤器


缓存击穿:

大量用户请求去不断访问某一热点key,当这个热点key突然失效,把请求打到数据库上,这个过程叫做击穿

解决方案:使用分布式锁

使用互斥锁,大量用户去访问redis请求数据,如果redis里的数据为空的话,他就会请求数据库,那么在请求数据库这一步给他上锁,这时只有一个线程能抢到这个锁,也就只有一个线程能操作这个数据库,当他查询到数据库时就把缓存重新写到这个redis里去,那么其他线程就不能到数据库查询数据,也不用再竞争分布式锁,直接在redis就返回了

雪崩针对的是大量商品总共的访问请求次数

击穿是大量用户对同一商品的请求次数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值