1、缓存击穿背后的问题

news2024/11/19 7:43:13

当面试官问:你知道什么是缓存击穿吗,你们是如何解决的?

首先我们要了解什么是缓存击穿?以及缓存击穿会引发什么问题?
缓存击穿就是redis中的热点数据过期,缓存失效,导致大量的请求直接打到数据库,进而导致数据库奔溃,整个程序挂掉

那你知道数据库的真实性能是什么样子吗?
我用jmeter对一张500万数据的MySQL表的聚簇索引和普通索引进行了压测,在100个并发下主键索引能有7万的QPS,普通索引也能有2700多的QPS,这还是我自己的PC测出来的数据,不是服务器,jmeter和MySQL还是在同一台机器上的情况。由此可知,MySQL不是可以随意打崩的数据库,这种QPS可能已经可以秒杀全国99%的公司了。
所以,缓存击穿导致数据库奔溃,本质上是一个高并发架构的问题,不是redis本身的问题,redis也是有可能被打崩的。

那么我们应该如何回答这个问题呢?
我觉得缓存击穿这个问题,不能光从redis层面上考虑,做一些永不过期、加锁等方案,而是应该从系统架构方面考虑,比如系统接入缓存监控告警、系统降级熔断策略以及正确评估系统业务量、缓存场景等。
1、正确评估自己系统的容量和业务中的慢sql,做到所有用缓存的场景,哪怕某一时刻所有缓存都失效,你的数据库能力能够承载此时的并发量。对使用缓存的查询用缓存是多少耗时,不使用缓存是多少耗时心中有数。对于TO C场景,就是要讲究查询足够简单,单个查询排除网络因素,要保证耗时在200毫秒以内,哪怕在复杂的场景,在复杂的sql,也要想办法去优化。

2、接入缓存监控告警,一些比较重要的大促级场景,如果等到系统挂了才知道,那绝对是生产事故了。举个例子,秒杀场景你把库存放到了缓存,假如秒杀时间是10分钟的话,这么重要的场景,应该去监控这个库存量和缓存失效时间,在即将过期的时候给个告警或者主动触发一个延时操作。

3、系统降级熔断策略,假如缓存被击穿了,数据库挂了,导致大量请求超时,平均RT也在飙升,此时降级熔断策略应该生效了。举个例子,当你最近100次的请求,平均RT都超过5秒钟了,系统报错率也在飙升,此时应该去熔断对数据库的查询操作,不应该等着全链路上面依赖数据库的请求都挂了,引发生产事故。

当做完这些准备之后,再去谈怎么单纯解决缓存击穿的问题,可以完全忽略那些什么key永不过期的方案,因为一个要去考虑缓存击穿问题的系统,绝对是高并发和海量数据的,如果数据是海量的,不可能把海量数据全部丢到redis里去。当然你可能说你只存热点数据,那什么是热点数据呢?以前微博的架构师做过分享,他们根据长期的业务经验积累,明明知道周一可能会出现热点事件,但是还是阻挡不住,比如某些明星官宣恋情的时候就挂了,所以重要的不是预测,而是做好保底方案。再回到缓存击穿、缓存雪崩、缓存穿透等问题,他们不是redis本身的问题,当然在redis层有一些解决方案,但是这些方案都是有局限性的,应该从系统架构的角度去分析问题,才能有一个更好的解决方案。

缓存击穿图解:
缓存击穿图解

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

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

相关文章

【c++】高精度算法(洛谷刷题2024)玩具谜题详解(含图解)

系列文章目录 第三题:玩具谜题 视频讲解:http://【洛谷题单 - 算法 - 高精度】https://www.bilibili.com/video/BV1Ym4y1s7BD?vd_source66a11ab493493f42b08b31246a932bbb 文章目录 目录 系列文章目录 文章目录 前言 一、题目分析以及思考 二、代码…

伊恩·斯图尔特《改变世界的17个方程》相对论笔记

它告诉我们什么? 物质包含的能量等于其质量乘以光速的平方。 为什么重要? 光的速度很快,它的平方绝对是一个巨大的数。1千克的物质释放出的能量相当于史上最大的核武器爆炸所释放能量的约40%。一系列相关的方程改变了我们对空间、时间、物质和…

C/C++ - 函数进阶(C++)

目录 默认参数 函数重载 内联函数 函数模板 递归函数 回调函数 默认参数 定义 默认参数是在函数声明或定义中指定的具有默认值的函数参数。默认参数允许在调用函数时可以省略对应的参数,使用默认值进行替代。 使用 默认参数可以用于全局函数和成员函数。默认参…

WebRTC 入门:开启实时通信的新篇章(上)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

使用电脑时突然遇到“mfc140.dll文件丢失”的问题都有什么解决办法

当你在使用电脑时突然遇到“mfc140.dll文件丢失”的问题时,可能会感到困惑和苦恼。一旦出现这样的问题,缺少这个文件可能导致一些应用程序无法正常启动,影响你的工作和娱乐体验。其实这个问题是可以解决的,接下来我们将介绍一些可…

部署个人知识库管理软件 MrDoc详细教程

效果 一、拉取 MrDoc 代码 进入目录: cd /opt开源版: git clone https://gitee.com/zmister/MrDoc.git专业版: git clone https://{用户名}:{密码}git.mrdoc.pro/MrDoc/MrDocPro.git二、拉取 Docker 镜像 docker pull zmister/mrdoc:v7三…

yarn安装第三方插件包,提示报错,yarn的镜像源已经过期了,因为yarn和npm用的是淘宝的镜像源,淘宝的镜像源已经过期了,要设置最新的淘宝镜像源。

淘宝最新镜像源切换_淘宝镜像-CSDN博客 查看yarn用的什么镜像源 yarn config get registry 查看具体的信息 yarn config list 设置淘宝的最新镜像源,yarn和npm都要设置最新的淘宝镜像源,不然还是报错 npm config set registry https://registry.npmm…

211毕业38岁产品经理被裁瞒着妻子送外卖

估计很多人都看到这个新闻了,微博和知乎也都上了热搜榜。 有人说,这一看就是摆拍的,谁没事在家里装个摄像头啊,这两人演技也还差点意思。 也有人说,大丈夫能屈能伸。虽然211毕业在互联网大厂工作,但是被裁了…

代码随想录算法训练营Day42|0-1背包理论基础、416. 分割等和子集

目录 0-1背包理论基础 0-1背包问题 二维dp数组01背包 算法实现 一维dp数组01背包 ​编辑算法实现 416. 分割等和子集 前言 思路 算法实现 总结 0-1背包理论基础 0-1背包问题 题目链接https://kamacoder.com/problempage.php?pid1046 有n件物品…

一、Kotlin 开发环境搭建

1. Kotlin 官网 https://kotlinlang.org/ 2. Kotlin 命令行工具下载 下载网址: https://github.com/JetBrains/kotlin/releases/tag/v1.3.50 切换其他版本,改下版本号即可 下载 kotlin-compiler-1.3.50.zip 文件即可 解压 kotlin-compiler-1.3.50.zip…

【智能家居入门之环境信息监测】(STM32、ONENET云平台、微信小程序、HTTP协议)

作为入门本篇只实现微信小程序接收下位机上传的数据,之后会持续发布如下项目:①可以实现微信小程序控制下位机动作,真正意义上的智能家居;②将网络通讯协议换成MQTT协议再实现上述功能,此时的服务器也不再是ONENET&…

回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测(含优化前后预测可视化)

回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测 目录 回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测预测效果基本介绍程序设计参考资料预测效果 <

Cesium.js实现显示点位对应的自定义信息弹窗(数据面板)

零、相关技术选型&#xff1a; Vue2 Vuecli5 Cesium.js 天地图 一、需求说明 在使用2D地图&#xff08;天地图、高德地图等&#xff09;基于官方文档可以实现下面需求&#xff1a; 实现添加点位&#xff0c;并在点位附近显示对应的信息弹窗。 一般信息弹窗的显示方式有两种&am…

Qt线程高级应用

一般我们在用Qt开发时&#xff0c;把耗时操作放在线程中执行&#xff0c;避免卡界面&#xff0c;Qt的线程使用有两种方式&#xff0c;一种是继承QThread&#xff0c;一种是moveToThread的方式&#xff0c;以及QtConcurrent方式 首先我们来看第一种&#xff1a; #ifndef WORKER…

matlab appdesigner系列-仪器仪表3-旋钮

旋钮&#xff0c;同过旋转显示特定的值 示例&#xff1a;模拟收音机调频 操作步骤&#xff1a; 1&#xff09;将旋钮、标签按钮拖拽到画布上&#xff0c;将标签文字修改为&#xff1a;欢迎收听&#xff0c;并将旋钮其数值范围改为90-107 2&#xff09;设置旋钮的回调函数 代…

实现屏蔽 Ctrl + Alt + Del 、Ctrl + Shift + Esc 等热键(一)

前面几篇我们都讲解了很多有关 winlogon 挂钩的事情。拦截系统热键的非驱动方式是比较复杂的。本节就复现《禁止CtrlAltDel、WinL等任意系统热键》一文中的方法四&#xff0c;实现拦截 Ctrl Alt Del 等热键。其实通过 heiheiabcd 给出的方法从 WMsgKMessageHandler 入手并不是…

数字图像处理(实践篇)三十二 OpenCV-Python比较两张图片的差异

目录 一 方案 二 实践 ​通过计算两张图像像素值的均方误差(MSE)来比较两张图像。差异大的两张图片具有较大的均方差值,相反,相似的图片间则具有较小的均方差值。需要注意的是。待比较的两张图像要具有相同的高度、宽度和通道数。 一 方案 ①导入依赖库 import cv2 import…

【项目管理】CMMI-管理性能与度量

管理性能与度量 (Managing Performance and Measurement, MPM)的目的在于开发和维持度量能力来管理开发过程性能&#xff0c;以实现公司业务目标&#xff0c;更直接来说&#xff0c;将管理和改进工作集中在成本、进度表和质量性能上&#xff0c;最大限度地提高业务投资回报。 1…

vscode copilot怎么去掉提示代码(ghost text or incline completion)

原因&#xff1a;最近在刷题&#xff0c;被这个提示烦死了&#xff0c;记录一下怎么关掉&#xff0c;防止将来需要开启找不到了XD. 1.直接ctrlshiftp召唤设置 2.输入preferences: open usr settings找到如图第一个 3.去掉这个方框的勾选 ps直接在extension里disable不行呢 不…

OpenHarmony—仅允许在表达式中使用typeof运算符

规则&#xff1a;arkts-no-type-query 级别&#xff1a;错误 ArkTS仅支持在表达式中使用typeof运算符&#xff0c;不允许使用typeof作为类型。 TypeScript let n1 42; let s1 foo; console.log(typeof n1); // number console.log(typeof s1); // string let n2: typeof …