首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

缓存击穿及其解决办法

  • 23-10-13 01:41
  • 3698
  • 14207
blog.csdn.net

缓存击穿是指在高并发系统中,缓存中不存在但存储层中存在的数据,在某一时刻被大量请求同时查询,导致大量请求落到存储层上,引起数据库压力过大或者宕机的现象。

通常情况下,当一个请求需要查询一个存在于存储层但不在缓存中的数据时,缓存无法命中,会向存储层发起查询请求,这个查询请求可能会因为某些原因(比如过多的请求、热点数据)导致存储层宕机,从而引起缓存击穿。

缓存击穿示意图如下:

  1. 多个请求同时查询一个不存在于缓存中但存在于存储层中的数据,由于缓存中没有相应的数据,多个请求都会落到存储层进行查询。

  2. 查询请求发生堆积,存储层负载过高,出现宕机等问题,导致系统响应变慢甚至瘫痪。

  3. 将热点数据预先加载到缓存中,在第一次查询时就将数据加载到缓存中,避免了对存储层的大量查询请求,从而保证系统响应速度和稳定性。

避免缓存击穿常见的方法包括:

  1. 加锁:当多个请求同时访问一个不存在于缓存中但存在于存储层中的数据时,可以通过加锁机制,确保只有一个线程去查询存储层,并将查询结果写入缓存中。其他线程在等待同步响应的同时使用缓存数据。

  2. 数据预热:将一些热门数据预先加载到缓存中,避免由于访问量暴增导致的缓存击穿问题。比如,在系统启动前,可以将热点数据进行加载,或者在非高峰期对热点数据进行周期性更新。

  3. 使用布隆过滤器(Bloom Filter):布隆过滤器可以快速判断某个键是否可能存在于缓存中,从而避免大量无效的查询操作。如果布隆过滤器判断该键不存在于缓存中,则直接返回缓存未命中。

  4. 设置热点数据永不过期:将热点数据设置成永不过期,避免数据失效和缓存击穿问题的发生。但需要注意,这种做法可能会带来一定的数据一致性问题。

总之,针对不同的场景和需求,可以采用不同的方法来避免缓存击穿问题。

返回目录

注:本文转载自blog.csdn.net的打了鸡血的点狗的文章"https://blog.csdn.net/m0_53396342/article/details/130093554"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top