缓存在高并发场景下的常见问题

news2025/1/12 19:07:30

缓存一致性问题

当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。这就比较依赖缓存的过期和更新策略。一般会在数据发生更改的时,主动更新缓存中的数据或者移除对应的缓存。

缓存穿透问题

缓存穿透在有些地方也称为“缓存击穿”。大多数人对缓存穿透的理解是:由于缓存故障或者缓存过期导致大量并发请求穿透到后端数据库服务器,从而对数据库造成巨大冲击。

下列几种情况,可能导致缓存穿透问题。

缓存并发导致的穿透问题

缓存过期后将尝试从后端数据库获取数据,这是一个看似合理的流程。但是,在高并发场景下,请求并发的穿透到数据库中获取数据,对后端数据库造成极大的冲击,甚至导致“雪崩”现象。此外,当某个缓存key在被更新时,同时也可能被大量请求在获取,这也会导致一致性的问题。那如何避免类似问题呢?我们会想到类似“锁”的机制,在缓存更新或者过期的情况下,先尝试获取到锁,当更新或者从数据库获取完成后再释放锁,其他的请求只需要牺牲一定的等待时间,即可直接从缓存中继续获取数据。如图:

缓存不命中导致的穿透问题

在高并发场景下,如果某一个key被高并发访问,没有被命中(查出来为空),出于容错性考虑,会尝试去从后端数据库中获取,从而导致了大量请求达到数据库。而当该key对应在数据库中的数据本身就为空的情况下,这就导致数据库中并发的去执行了很多不必要的查询,从而给数据库带来巨大冲击和压力。

可以通过下面的几种常用方式来避免缓存穿透问题:

缓存空对象

对查询结果为空的对象也进行缓存,如果是集合,可以缓存一个空的集合(非null),如果是缓存单个对象,可以通过字段标识来区分。这样避免请求穿透到后端数据库。同时,也需要保证缓存数据的时效性。这种方式实现起来成本较低,比较适合命中不高,但可能被频繁更新的数据。

单独过滤处理

对所有可能对应数据为空的key进行统一的存放,并在请求前做拦截,这样避免请求穿透到后端数据库。这种方式实现起来相对复杂,比较适合命中不高,但是更新不频繁的数据。

缓存颠簸问题

缓存的颠簸问题,有些地方可能被称为“缓存抖动”,可以看作是一种比“雪崩”更轻微的故障,但是也会在一段时间内对系统造成冲击和性能影响。一般是由于缓存节点故障导致。业内推荐的做法是通过一致性Hash算法来解决。

缓存的雪崩现象

缓存雪崩就是指由于缓存的原因,导致大量请求到达后端数据库,从而导致数据库崩溃,整个系统崩溃,发生灾难。导致这种现象的原因有很多种,上面提到的“缓存并发”,“缓存穿透”,“缓存颠簸”等问题,其实都可能会导致缓存雪崩现象发生。这些问题也可能会被恶意攻击者所利用。还有一种情况,例如某个时间点内,系统预加载的缓存周期性集中失效了,也可能会导致雪崩。为了避免这种周期性失效,可以通过设置不同的过期时间,来错开缓存过期,从而避免缓存集中失效。

从应用架构角度,我们可以通过限流、降级、熔断等手段来降低影响,也可以通过多级缓存来避免这种灾难。

此外,从整个研发体系流程的角度,应该加强压力测试,尽量模拟真实场景,尽早的暴露问题从而防范。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JMeter性能测试---完整入门到白了少年头

目录 一、性能测试 二、负载/压力/可靠性 三、JMeter工具 四、负载脚本 五、Jmeter参数化 六、远程操作运行脚本 一、性能测试 测试目的: 1.客户有明确要求,如:系统要求同时满足5000个用户登录,平均每个用户登录时间不能超…

体积小纯净无打扰,新版微软电脑管家在教国内做杀软

早在去年初,微软电脑管家就开启了 V1.0 版本内测,咱们也在第一时间替大伙儿体验了一番。 微软电脑管家最初就是专为国内用户推出的,算是真正做到了精简省心,无任何流氓广告弹窗行为。 这与咱们国内各种流氓杀软环境形成了极为鲜明…

IIS 7中添加匿名访问FTP站点

1. 开启FTP和IIS服务: 2.打开IIS 管理器: 我电脑上是IIS 7.5 ,所以选择第一个并点击打开哦。 如果你想知道自己IIS的版本,打开帮助菜单: 3. 新建FTP站点: 4. 填写站点基本信息: 5. 设置绑定和S…

Stable diffusion WebUI img2img使用教学

图生图 (img2img) 相较于文生图 (txt2img),因存在参考图片的基础上创作,其可控性自然更强。下面从图生图的几个应用方向出发,详述其功能特性。 文章目录 推提示词img 重新绘制参考图Resize mode 缩放模式Denoising 重绘幅度 Sketch 绘图Inpai…

集成光子芯片量子器件研究重要进展

前言: 中国科学技术大学郭光灿院士团队在集成光子芯片量子器件的研究中取得重要进展。该团队邹长铃、李明研究组提出人工合成光学非线性过程的通用方法,在集成芯片微腔中实验观测到高效率的合成高阶非线性过程,并展示了其在跨波段量子纠缠光源…

亚马逊云科技中国峰会“创业者之日”,赋能不同领域创业者前行

IDC预测,到2025年全球数据规模将达到175 ZB,这为人工智能模型训练提供了海量数据资源,全球AI产业迅速发展为创业者们带来了巨大的机遇,但也提出了全新的挑战。新的市场、高效的工具和智能的资源,开辟了创新的领域和商业…

23年互联网Java后端面试最全攻略,只花一周时间逼自己快速通关面试

大家从 Boss 直聘上或者其他招聘网站上都可以看到 Java 岗位众多,Java 岗位的招聘薪酬天差地别,人才要求也是五花八门。而很多 Java 工程师求职过程中,也是冷暖自知。很多时候技术有,但是面试的时候就是过不了! 为了帮…

JVM存储模型、值传递和引用传递

JVM存储模型、值传递和引用传递 一、首先根据下图理解一下JVM是什么? — Java程序和操作系统之间的桥梁 二、Java数据存储模型 因为栈区、本地方法栈、程序计数器是线程私有的,每一个线程在运行时会单独去创建这样一个内存,所以说有多少个线…

前端18K面试题总览,往这方面准备就对了

Vue面试题 生命周期函数面试题 1.什么是 vue 生命周期2.vue生命周期的作用是什么3.第一次页面加载会触发哪几个钩子4.简述每个周期具体适合哪些场景5.created和mounted的区别6.vue获取数据在哪个周期函数7.请详细说下你对vue生命周期的理解? vue路由面试题 1.mv…

Unity核心2——Sprite

顾名思义,Sprite Editor 就是精灵图片编辑器,它主要用于编辑 2D 游戏开发中使用的 Sprite 精灵图片 ​ 它可以用于编辑,图集中提取元素,设置精灵边框,设置九宫格,设置轴心(中心)点等…

以色列QM和荷兰QuantWare合作提供预集成控制系统和QPU解决方案

​ (图片来源:网络) 6月13日,以色列量子计算机操作系统初创公司Quantum Machines(QM)和荷兰超导量子处理器(QPU)的领先供应商QuantWare宣布合作,旨在大幅加速研究进展&a…

火爆全网,python自动化测试logging日志模块使用方法(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、日志级别 imp…

3D WEB轻量化引擎工具HOOPS Communicator与Three.js和自主DIY的对比分析

​基于Web的2D和3D可视化已经变得越来越流行,而且市场根据这些变化,为其提供了更丰富的实用性。如果处理得好,开发人员可以使用户以简单、用户友好的方式与其他客户、开发人员或其他任何人共享来自市场的设计。 当开发人员考虑第三方提供这项…

保险业服务模式“智能化”升级

近年来,随着数字时代的多元化发展,人工智能技术凭借其高度便利性,已被广泛拓展应用到各行各业。在AI的加持下,保险行业的发展正处于从“数字化”阶段迈向“智能化”阶段的过渡时期,销售渠道多样、业务量激增以及客户对…

Django之路由层

一、路由的作用 路由即请求地址与视图函数的映射关系,如果把网站比喻为一本书,那路由就好比是这本书的目录,在Django中路由默认配置在urls.py中,如下图: 二、简单的路由配置 # urls.py from django.urls import re_…

java 献血管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 献血管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

CSS查缺补漏之《如何优雅解决margin垂直方向塌陷与合并问题?》

一:父子元素之间margin垂直方向塌陷问题 在处理margin垂直方向问题时,经常会遇到在给子元素设置margin时,导致效果出现在了父元素上;如下代码所示: 代码原义是想实现三方面: ① 将box1的margin-top调为5…

Activity 的生命周期和启动方式

Activity 的生命周期 Activity A 启动B,生命周期: A: onPause - B: onCreate-onStart-onResume- A:onStop Activity B返回 A,生命周期: B:onPause - A:onRestart - onStart - onResume - A:onStop onPause onStop 区…

分布式数据保护策略——多副本和纠删码怎么选?

在之前的《一文读懂分布式存储》文章中,我们介绍了什么是分布式存储。 但谈到存储,安全就是一个绕不开的话题。 没有数据安全的存储毫无意义。 所以数据保护技术对于分布式存储来说非常重要。 ▉ 为什么需要数据保护? 数据显示&#xff0…

考研英语|2022年真题 正确率:16/20|14:00~15:30

22 错 25 错 34 错 40 错 Text 1 21 实词对应 preservemaintain 22 推理判断题 错因:仅仅定位在vulnerable 没有继续往后阅读 immune to decay 理解错误,真确释义为“不会腐烂”,错误理解为“容易腐烂坏掉” 文中定位:第…