缓存穿透和缓存雪崩

本文探讨了缓存系统中常见的两种问题——缓存穿透和缓存雪崩,及其对数据库造成的影响。针对缓存穿透,提出了拦截非法请求、缓存空对象及建立数据库标识仓库的解决方案;对于缓存雪崩,则建议采用Redis集群、分散过期时间和控制并发访问等策略来应对。
摘要由CSDN通过智能技术生成

缓存穿透和缓存雪崩其实是在项目中会遇到的两种情况,它们是两种概念。

缓存穿透:

       其实就是你原本在程序和数据库中间做了缓存,程序运行时需要的数据很多可以从缓存中拿取,不用每次都访问数据库,从而给数据库极大的减轻了压力。但是,突然需要查询很多数据库中不存在的数据,数据库中不存在这些数据,自然也没有储存在缓存中。所以造成这些查询绕过了缓存,直接面向数据库查询,造成数据库性能下降。当这样的查询数据很多的话,会给数据库造成极大的压力,造成程序的服务出现问题,严重的甚至宕机。

缓存穿透出现的情况:

       由于单机Mysql最大能承受的并发连接数只有1000左右,因此无论是设计失误(如某个高频访问的缓存对象过期),恶意攻击(频繁查询某个数据库中不存在的数据),还是偶发事件(某个社会新闻导致某个热点的搜索量瞬间巨增)等,都会让数据库遭受缓存穿透,从而宕机。

缓存穿透的解决办法:

1,拦截非法的查询请求,仅仅将合理的请求传递给数据库。比如验证码,IP限制等手段限制恶意攻击,并用敏感词过滤器等拦截不合理的非法查询。

2,缓存空对象。比如,在提前知道一个 " 热词 " 将会被大量查询的情况下,在缓存中加入这个将会被用户大量查询的词,在缓存中设置  key="热词",value="",实际上这个数据在数据库中并不存在。这样用户在搜索这个热词的时候就可以直接从缓存中拿到结果,从而避免了对数据库的访问。

3ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

soutv

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

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

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

打赏作者

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

抵扣说明:

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

余额充值