缓存穿透、缓存雪崩和缓存击穿

目录

 

缓存穿透

缓存雪崩

缓存击穿


缓存穿透

是指查询一个数据库一定不存在的数据

流程:

    1、请求参数

    2、根据key从缓存中获取对象 有返回

    3、没有查数据库,并缓存

    4、数据库缓存都没有数据。

解决的问题:

    假如有恶意攻击,就可以利用这个漏洞,对数据库造成压力,甚至压垮数据库

解决的方案:

    采用缓存空值的方式,如果从数据库查询的对象为空,也放入缓存,只是设定的缓存过期时间较短,比如设置为60秒。

缓存雪崩

是指在某一个时间段,缓存集中过期失效。

举例:

    比如双十一。0点抢购。缓存1小时。0点用户疯狂抢购。到了一点之后缓存数据集体失效。就会去疯狂查询数据库,数据库就会产生周期性的压力波峰

解决方案:

    key的缓存失效时间均匀地错开。一般是采取不同分类商品,缓存不同周期。在同一分类中的商品,加上一个随机因子。这样能尽可能分散缓存过期时间,而且,热门类目的商品缓存时间长一些,冷门类目的商品缓存时间短一些,也能节省缓存服务的资源。

集中过期,倒不是非常致命

比较致命的缓存雪崩,是缓存服务器某个节点宕机或断网。因为自然形成的缓存雪崩,一定是在某个时间段集中创建缓存,那么那个时候数据库能顶住压力,这个时候,数据库也是可以顶住压力的。无非就是对数据库产生周期性的压力而已。而缓存服务节点的宕机,对数据库服务器造成的压力是不可预知的,很有可能瞬间就把数据库压垮 

缓存击穿

是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞

解决方案:

    1、可以设置这个key为永不过期

    2、用加锁或者队列的方式保证缓存的单线程(进程)写,在加锁方法内先从缓存中再获取一次,没有再查DB写入缓存。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值