前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java面试小短文】怎样防止缓存击穿?

【Java面试小短文】怎样防止缓存击穿?

作者头像
砖业洋__
发布2023-05-06 20:41:59
1740
发布2023-05-06 20:41:59
举报
文章被收录于专栏:博客迁移同步博客迁移同步

怎样防止缓存击穿?

  实际用里面,我们会在程序和数据库之间增加一个缓存层。一方面呢是为了提数据的检索效率,提升程序的性能,另外一方面,是为了缓解数据库的并发压力。

  缓存击穿表示请求因为某些原因全部打到了数据库,缓存并没有起到流量缓冲的作用。

  有两种情况会导致缓存击穿

  • 1.在redis里面,保存的热点key在缓存过期的瞬间,有大量的请求进来,导致请求全部打到数据库里。
  • 2.客户端恶意发起大量不存在的key的一个请求,由于访问的key对应的数据本身也不存在,所以每一次必然都会穿透到数据库里面,导致缓存成了摆设。

综上,当redis承担了流量缓冲功能的时候,就需要考虑redis失效导致并发压力过大对于后端存储设备造成冲击的问题。

解决方案:

  • 1.对于热点数据的访问,可以不设置过期时间,或者在访问数据的时候对数据的过期时间进行续期。
  • 2.对于访问量较高的缓存数据,可以设计多级缓存,尽量减少后端存储设备的压力。
  • 3.使用分布式锁。当发现缓存失效的时候,不是先从数据库加载数据,而是先去获取分布式锁,获取到分布式锁的线程从数据库查询到数据后写回到缓存里面,后续没有获得锁的线程只需要等待和重试就行,这样就能避免大量请求打到后端存储设备的问题,这个方案虽然牺牲一定的性能,但是确保了数据库的稳定性。
  • 4.对于恶意攻击类的场景,可以使用布隆过滤器,应用程序在启动的时候,把存在的数据缓存到布隆过滤器里,每一次请求进来的时候,先访问布隆过滤器,如果不存在,则说明这个数据一定没有在数据库,则没有必要再去访问数据库。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 怎样防止缓存击穿?
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档