缓存雪崩 缓存击穿-总结

news2024/12/30 3:58:41

目录

缓存雪崩 缓存击穿-总结

缓存雪崩

出现场景:

解决方案:

缓存击穿

出现场景:

举例如图:

缓存击穿的三个前提:

解决方案:


缓存雪崩 缓存击穿-总结

缓存雪崩

出现场景:

(1) 对于Redis缓存中缓存的一些数据我们都会给它们设置一个TTL超时时间的,但是假设大量的缓存数据在同一时间这个TTL都到期了,那么大量的缓存数据都直接失效了,就会导致大量的请求打到数据库,给数据库造成巨大的压力,这样就会造成缓存雪崩。

(2) 假设说Redis缓存部署的服务器突然宕机了,那么所有的缓存在宕机的时候就直接失效了,这样同样会导致请求打到数据库,给数据库造成巨大的压力,这样也会造成缓存雪崩。

解决方案:

(1) 给Redis中缓存的不同的key的TTL有效期添加一个随机值,这样可以保证Redis缓存不会在同一时间内大量过期失效。

(2) 利用Redis集群提高服务的可用性。

分析:使用Redis集群,即使一台Redis服务器宕机了,那么其它Redis服务器也会进行一定的保证。

(3) 给缓存业务添加降级限流策略。

分析:对于缓存业务进行降级,放弃一些功能业务的优势来换取安全性。

(4)给业务添加多级缓存

分析:在一个业务中,不止是可以添加Redis缓存,我们还可以添加其它很多的缓存,比如说:JVM缓存,Nginx缓存等等。有了多级缓存,那么即使Redis缓存失效了,我们还有其它缓存进行兜底。

缓存击穿

缓存击穿问题也叫做热点Key问题,就是一个被高并发访问并且缓存重建较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。

出现场景:

被高并发访问的数据被称为是热点Key数据。一个热点Key数据被缓存在Redis中,并且该热点Key数据的重建缓存的过程较为复杂,时间比较长。

那么当该热点Key突然缓存失效了。由于该热点Key数据重建缓存的时间较长,那么在这段较长的时间内,高并发的请求都会打到数据库上,这就会造成缓存击穿问题。

举例如图:

在线程1查询数据库并且重建缓存数据的过程中【该过程较长】,大量的线程请求访问该热点Key数据,都会直接打到数据库,造成缓存击穿。

缓存击穿的三个前提:

(1) 被高并发访问的数据缓存在Redis中,该缓存突然失效

(2) 该高并发访问的数据重建缓存的时间过长【因为如果重建时间过短,即使缓存失效,在访问数据库后会进行迅速的重建缓存,那么也不会造成缓存击穿的问题】

(3) 在该数据进行重建缓存的过长时间中,大量的请求过来访问该数据。

解决方案:

方案1:加互斥锁

分析流程:

添加一个互斥锁 当一个线程进行访问的时候 进行获取互斥锁,获取成功则进行作用。

如果其他线程也进入之后,获取互斥锁失败,此时会进入休眠等待,休眠等待结束后继续重试获取互斥锁,直到线程执行完查询数据库重建缓存数据并且写入缓存之后的操作之后,进行释放锁。其他线程才可以获取锁成功。

优点:

1.保证了数据的一致性,返回的一定是最新的数据。

2.实现简单,没有额外的内存消耗

缺点:

1.线程需要进行等待,性能受到很大影响。这就是化并行为串行

2.可能会有死锁风险

死锁:对于一个业务来说,我们可能会搞出多个缓存重建的操作。所以说我们加上的锁不止有一个,当我们进行获取锁的时候

可能会获取别的锁,导致别的线程获取锁失败,这种获取不到对应使用锁的情况。我们就称之为死锁!

方案2:逻辑过期

额外存储开启一个逻辑过期时间。

分析流程:

当线程1获取互斥锁成功之后,他不会在线程1内进行一系列的操作,它会额外开启一个线程2去进行操作。线程1返回过期数据即可。

当线程3进行请求数据的时候 发现获取互斥锁失败,比较佛系 直接返回过期的旧数据

当线程4开启并且正好在开启的线程2作用完毕之后进行开启的,那么会直接命中缓存 并且这个数据是最新的数据。因为是恰好在线程2操作完成之后开启作用的 !

优点:

线程无需等待,性能好

缺点:

1.不能保证数据一致性

2.因为多开启了一个逻辑时间 ,所以有额外的内存消耗

3.实现起来比较复杂

总结不易,期待三连

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

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

相关文章

用于隔离PWM的光耦合器选择和使用

光耦合器(或光隔离器)是一种将电路电隔离的器件,不仅在隔离方面非常出色,而且允许您连接到具有不同接地层或在不同电压电平下工作的电路。光耦合器具有“故障安全”功能,因为如果受到高于最大额定值的电压,…

3.1 OSPF引入路由

实验目的掌握OSPF引入静态路由的办法掌握OSPF引入直连路由的办法实验拓扑OSPF引入路由实验拓扑如图3-1所示: 图3-1:OSPF引入路由 实验步骤配置IP地址R1的配置 <Huawei>system-view [Huawei]undo info-center enabl

软件测试面试题中的sql题目你会做吗?

目录 1.学生表 2.一道SQL语句面试题&#xff0c;关于group by表内容&#xff1a; 3.表中有A B C三列,用SQL语句实现&#xff1a;当A列大于B列时选择A列否则选择B列&#xff0c;当B列大于C列时选择B列否则选择C列 4. 5.姓名&#xff1a;name 课程&#xff1a;subject 分数&…

node-sass按照失败

一、描述 从网上下载的一个Vue模板项目&#xff0c;导入VsCode&#xff0c;执行npm install命令后&#xff0c;报错了&#xff0c;报错的信息是node-sass安装失败&#xff0c;同时提示需要python环境的错误信息&#xff0c;这是因为安装node-sass失败了&#xff0c;而node-sas…

开源实时监控系统 HertzBeat 对 Linux 操作系统的监控告警实践

使用开源实时监控系统 HertzBeat 对 Linux 操作系统的监控告警实践&#xff0c;5分钟搞定&#xff01; HertzBeat 介绍 HertzBeat 是一款开源&#xff0c;易用友好的实时监控系统&#xff0c;无需Agent&#xff0c;拥有强大自定义监控能力。 集监控-告警-通知为一体&#xff0…

Spring入门案例三:注解进行引用类型的自动装配

本系列文章将会带领大家进行Spring的全面学习&#xff0c;持续关注我&#xff0c;不断更新中… 一.案例分级 简单解析:配置类替代以前的配置文件&#xff0c;实体类提供对象&#xff0c;业务类中有实体类的引用对象&#xff0c;在业务层中实现引用类的自动装配。 二.各层代码…

Java基础 -- 泛型

Java基础 -- 泛型1. Introduction1.1 好处1.2 常用泛型2. User Guide2.1 泛型类2.2 泛型方法2.3 泛型接口3. 限定泛型范围4. Awakening1. Introduction 1.1 好处 代码复用&#xff0c;多种数据类型执行相同的代码在编译期间可以检查类型是否安全&#xff0c;报警ClassCastExce…

什么是webpack

目录 1、什么是webpack&#xff08;必会&#xff09; 2、Webpack的优点是什么&#xff1f;&#xff08;必会&#xff09; 3、webpack的构建流程是什么?从读取配置到输出文件这个过程尽量说全&#xff08;必会&#xff09; 4、说一下 Webpack 的热更新原理(必会) 5、webpa…

为什么说接口幂等性很重要

先讲个故事大概三年前&#xff0c;外卖平台 Uber Eats 在印度发生了一次重大事故&#xff0c;使得用户可以免费获得食品。一天早上&#xff0c;有人试图通过印度的 Uber Eats 订购食物&#xff0c;并使用印度的支付平台 Paytm 付款。但是&#xff0c;他的账户里面没有足够的余额…

蓝牙耳机哪款性价比高音质好?2023公认音质最好的蓝牙耳机

如今音乐成了当下解压的方式之一&#xff0c;甚至是集中注意力的法器。耳机作为传播音乐的媒介&#xff0c;每个人对自己的专属耳机总有那么点小追求&#xff0c;高质量的耳机不仅保护双耳&#xff0c;带来的音质能让你的耳朵分分钟怀孕&#xff0c;下面分享几款2023年音质高的…

Cain执行中间人攻击

实验目的&#xff1a;通过构建虚拟场景&#xff0c;了解中间人攻击和钓鱼网站攻击的执行流程&#xff0c;熟练使用Cain & Abel工具实现攻击&#xff0c;并掌握识别和防御此类攻击的技术原理和方法。 一、场景简介 甄某为犯罪嫌疑人&#xff0c;警察想获得甄某在其单位网站…

IB学科学习方法分享,看看不同学科怎么学习?(一)

在这个部分&#xff0c;我们邀请到了在各个学科中突出的同学们&#xff0c;让他们介绍自己的学习方法。同辈的经验总是我们能够获取的珍贵的宝藏&#xff01; 分享人&#xff1a;吴 分享学科&#xff1a;VA HL &#xff08;个人选课&#xff1a;HL&#xff1a;VA 中文 经济…

同行不同命:极兔喜、韵达愁?

配图来自Canva可画 年前买坚果、牛奶、灯笼、对联等年货&#xff0c;年后寄香肠、腊肉、泡菜、水果等特产&#xff0c;春节前后是快递业迎来收发货小高峰&#xff0c;三通一达&#xff0c;顺丰、京东、极兔相继宣布“春节不打烊”消息&#xff0c;全力保障快递运力。 春节快递…

力扣-组合两个表

大家好&#xff0c;我是空空star&#xff0c;本篇带你了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;175. 组合两个表二、解题1.left join提交SQL运行结果2.right join提交SQL运行结果总结前言 一、题目&#xff1a;175. 组合两个表 表: Person ----------…

Bernstein-Vazirani算法

B-V算法 (1) 问题描述 给定布尔函数f:{0,1}n→0,1f:{\left\{ {0,1} \right\}^n} \to{0,1}f:{0,1}n→0,1, 函数fff的值是由输入比特串xxx和确定的比特串sss做模2意义下的内积&#xff1a;f(x)x⋅s(mod2),f\left( x \right) x \cdot s\left( {\bmod 2} \right),f(x)x⋅s(mod2),…

【Node.js】 npm与包

npm与包什么是包包的来源为什么需要包从哪里下载包怎么下载包初体验在项目中安装包的命令npm的注意点包的语义化版本规范包管理配置文件&#xff08;package.json&#xff09;当第三方包的体积过大时快速创建package.jsondependencies节点devDependencies节点卸载包解决下载包速…

H.264视频隐写中可用于隐藏的场地(变换过程)

与静止图像中的信息隐藏类似&#xff0c;通过位平面替换的方式&#xff0c;亮度DCT系数通常被用于信息隐藏。 Ma等[77]提出将信息嵌入在I-frame中量化的DCT系数中(亮度)。在分析DCT系数与像素值产生的失真之间的关系的基础上&#xff0c;对几个系数进行配对&#xff0c;以达到数…

Web前端的未来发展怎样?

在求职的道路上&#xff0c;很多人都会经历漫长的迷茫期&#xff0c;如何找到职业方向成为人很多正在探索的事情&#xff01;当我们决定学习一个技能的时候&#xff0c;首先会考虑到零基础是否可以学&#xff0c;这个技术的前景怎么样&#xff0c;薪资高不高&#xff0c;未来发…

JavaSE学习day8 API的使用和String的内存原理

1.API 1.1API概述 什么是API API (Application Programming Interface) &#xff1a;应用程序编程接口 java中的API 指的就是 JDK 中提供的各种功能的 Java类&#xff0c;这些类将底层的实现封装了起来&#xff0c;我们不需要关心这些类是如何实现的&#xff0c;只需要学习这…

基于机器学习的推荐算法研究与实现

摘要随着互联网的普及&#xff0c;人们可以通过搜索引擎、社交网络等方式获取大量的信息资源。但是&#xff0c;面对如此之多的信息&#xff0c;人们往往会感到迷失和困惑&#xff0c;无法快速准确地找到自己需要的信息。在这种情况下&#xff0c;推荐算法的出现为我们提供了一…