缓存穿透、缓存击穿、缓存雪崩区别和解决方案

主要有用途:高性能、高并发、保护数据库

缓存穿透、缓存击穿、缓存雪崩区别

 前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。

缓存穿透

缓存穿透指缓存和数据库中都没有的数据,一般常见黑客攻击,请求用没有的数据直接穿透缓存,打到数据库上,导致数据库挂掉

用户请求数据,例如ID为负数,不存在缓存里,也不存在数据库里,会造成缓存穿透。

解决方案

1、无意义数据放入缓存,下一次相同请求就会命中缓存;
2、IP过滤;
3、参数校验;
4、布隆过滤器(也叫布谷鸟过滤器)

缓存击穿(也叫缓存失效)(单个热点key)

突然该key失效,一瞬间大量该key的请求打到数据库上导致数据库挂掉

指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力

解决方案

1、用久缓存;
2、分布式锁
 a.单体应用—>互斥锁—>zookeeper ,redis实现。

 

缓存雪崩(多个热点key)

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

大量缓存数据同时间失效,导致用户直接发起大量请求到数据库,产生瓶颈。

解决方案

1、生成随机失效的缓存时间数据,让他们不在同一时间失效
2、让缓存节点分布在不同的物理节点上,redis都是集群部署,还可以把热点的key放到不同的节点上去,让这些热点的key平均的分布在不同的节点上
3、不设置缓存失效时间,生成不失效的缓存数据;
4、定时任务更新缓存数据;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Johnny_Cheung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值