缓存击穿,缓存雪崩,缓存穿透的概念及其预防措施

本文深入探讨了缓存系统中常见的三大问题:缓存穿透、缓存雪崩和缓存击穿的概念、产生的原因及解决方案。针对缓存穿透,提出了接口参数校验和缓存空值策略;对于缓存雪崩,建议设置不同缓存有效期和使用缓存集群;而缓存击穿则可通过热点数据永久缓存和采用互斥锁解决。

一、缓存穿透

  概念:

     缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

  解决方案:

    1.接口校验请求参数的有效性,如校验id是否合法

    2.从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒。

二、缓存雪崩

  概念:

    指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。侧重很多的缓存数据都失效了。

  解决方案:

    1.设置不同的缓存到期时间,如热门数据有效期长一点,冷门数据有效期短一点。

    2.针对长期有效,数据变化基本不变的数据进行永久性缓存。

    3.缓存服务集群部署

三、缓存击穿

  概念:

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

  解决方案:

    1.热点数据实现缓存永久有效

    2.采用互斥锁来缓存数据

      缓存击穿的重点就是,同一时间点上,大量请求没有在缓存中命中数据,而对数据库服务产生巨大的压力,所以我们可以在请求数据库之前加上一个锁,持有锁的线程才能去请求数据库,并缓存到缓存数据库,其他的线程等待,最后从缓存获                      获取数据。

  代码展示:

  

转载于:https://www.cnblogs.com/zjting/p/10751277.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值