redis缓存击穿,缓存穿透和缓存雪崩解决方案


一、缓存击穿
1.什么是缓存击穿

缓存击穿也就是说当redis缓存中有一个key是大量请求同时访问的热点数据,如果突然这个key时间到了,那么大量的请求在缓存中获取不到该key,穿过缓存直接来到数据库导致数据库崩溃,这样因为单个key失效而穿过缓存到数据库称为缓存击穿。
redis缓存击穿,缓存穿透和缓存雪崩解决方案

2.怎么办,怎么解决

最简单粗暴的解决方案就是让热点key不设置过期时间,即key一直存在于缓存中,更新时直接覆盖即可。
设置定时任务检测要过期的key,然后在将要过期的时候重新从数据库把数据刷新到缓存中,这样的方式增加系统复杂度,并且实现复杂。
使用互斥锁的方案,在缓存中没有数据去数据库查询时加上锁,让一个线程去查询数据库以及更新缓存,其他线程等待,这样减小数据库压力。

二、缓存雪崩
1.什么是缓存雪崩

为了使查询速度更快,我们选择使用缓存来保存数据,使原本每次请求都需要查询数据库的操作变成先查询缓存,缓存有直接返回,缓存没有则查询数据库然后再写入缓存中,通常缓存都是有有效时长的,否则就会一直占用内存空间。
redis缓存击穿,缓存穿透和缓存雪崩解决方案
当大量请求在访问都会先从缓存查询,如果此时大部分缓存同时过期失效,那么这些请求都查询不到缓存,此时他们会全部将请求到数据库,当请求数量足够大时此时将会把数据库压垮,这就是缓存雪崩。比如在凌晨十二点搞促销,大约有10000个用户发起请求,此时缓存过期,则这10000个请求直接打到数据库上,把数据库压垮,即使重启数据库请求依然会打到数据库上。

2.怎么办,怎么解决

不设置过期时间,缓存更新直接刷新。
过期时间上加随机值,避免缓存集中过期。
使用集群将数据均匀分布在机器上。
采取一定的限流降级机制,防止大量请求搞垮数据库。

三、缓存穿透
1.什么是缓存穿透

指当请求查询缓存和数据库都不存在的数据时,先查询缓存为空,再查询数据库依然为空,向请求返回空,如果大量请求同时访问这些不存在key那么这些请求依然会造成压垮数据库的现象,这种通常是恶意查询和被攻击几率较大。
redis缓存击穿,缓存穿透和缓存雪崩解决方案
同样的请求一直出现,会造成压垮数据库的现象。

2.怎么办,怎么解决

缓存中存放查询的key,值设置为空,这样就能避免请求打到数据库,但是这样就会占用缓存空间。
在请求接口处做检查,如用户鉴权、参数校验等,对于不合法的请求直接返回,这样能够拦截部分不合法的请求。
使用布隆过滤器。

总结

缓存雪崩、缓存击穿、缓存穿透是生产和面试中常见的问题,在请求量小的时候这些问题造成的影响不大,但是一旦访问量大起来这些问题将会造成服务器宕机,甚至在重启服务器之后依然会扛不住压力继续宕机,只有提前为数据做好分析准备,选用合适方案进行解决才能够尽可能的减小生产服务器损失。

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

redis缓存击穿,缓存穿透和缓存雪崩解决方案

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » redis缓存击穿,缓存穿透和缓存雪崩解决方案
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏