Redis击穿、穿透、雪崩

news2024/11/26 16:41:49

Redis 的基本概念
在没有添加 Redis 的时候,后端的查询流程是:

用户访问页面-请求后端服务-经过逻辑处理后,去数据库查询信息。

在这里插入图片描述

在添加 Redis 的之后,后端的查询流程是:

用户访问页面-请求后端服务-经过逻辑处理后,先去缓存(Redis)中进行查询,如果查到,则直接返回-如果没有查到信息,则直接向数据库进行查询,查询到之后,数据库会讲数据信息同步到缓存(Redis)中,以便下次查询。
在这里插入图片描述

什么是击穿
当 Redis 某个热 key(比如首页广告)过期或者因为某些异常原因导致于无法从缓存中获取,导致大量的并发访问数据库而崩溃。

举个例子,比如双十一活动中,大量用户同时会查询首页的某个广告服务,正常查询流程中,我们的服务会直接在缓存中进行查询,查到了之后,返回给用户。

但是假设在这个过程中,这个广告服务的 key 过期,即这个缓存失效了,那么就会有大量的并发请求直接打到数据库中,导致数据库崩溃。

image

如果要复现这个测试场景,可以通过如下的测试步骤进行复现:

获取热 key 的列表(与运维沟通后获取)。

模拟热 key 失效的场景(比如登陆 Redis,直接将热 key 删除)。

查看研发是否有对应的容错机制(降级或熔断),从而能保证主要服务的正常运行。
解决方案:

1.设置热key永不过期,缓存在物理上永远不过期,用一个异步的线程更新缓存
2.双层缓存策略,L1缓存失效时间短,L2缓存失效时间长。请求优先从L1缓存获取数据,如果 未命中,则加锁,保证只有一个线程去数据库中读取数据然后再更新到L1和L2中。然后其他线 程依然在L1、L2缓存获取数据。
3.互斥锁

什么是穿透
缓存穿透就是指:用户不断发起请求缓存和数据库中都没有的数据

在正常的请求过程中,如果在缓存(Redis)中没有查到信息,则直接向数据库进行查询,查询到之后,数据库会讲数据信息同步到缓存(Redis)中,以便下次查询。

image

如果是缓存穿透的场景,比如传一个用户 id 为-1,这个用户 id 在缓存里面是肯定不存在的,因为每次请求数据库中也没有对应的数据信息,那么数据库也就不会同步到缓存(Redis)中,所以就会导致,每一次的请求,都会直接打到数据库上,导致数据库崩溃。

image

如果要复现这个测试场景,可以通过如下的测试步骤进行复现:

不停访问对应服务的接口,传递一个不存在的数据的查询请求。

查看研发是否有对应的容错机制,从而能保证不会有大量的请求打在数据库上。
解决方案:

  如果一个查询返回的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

什么是雪崩
雪崩是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到数据库,数据库瞬时压力过重雪崩。

缓存被“击穿”的问题是针对某一key缓存,缓存雪崩的区别在于针对很多key。
解决方案:

1.我们可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件
2.互斥锁
3.双层缓存策略
4.缓存在物理上永远不过期,用一个异步的线程更新缓存

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

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

相关文章

超强AI绘图-文生图

一、前言 前面汇总了四种AI绘图的方法,详情可以点击下图跳转到文章《AI绘画合集(11月汇总)》。主要内容是:具象意象派AI作图、AI绘制专属动漫头像、基于ViLG模型AI 作画。点击下面文章跳转! 《AI绘图—对中文拟合度…

LabVIEW创建类 3

LabVIEW创建类 3 继承 通过“继承”可在现有类的基础上创建新类。若创建一个新的LabVIEW类并将它设置为继承另一个类的数据及成员VI,这个新类将可使用它所继承的类中“公共”及“保护”型的成员VI。这个新类还可添加自己的数据和成员VI以丰富其功能。例如&#xf…

聚观早报 | 脸书泄露数据被罚20亿;iPhone15将全系支持灵动岛

今日要闻:脸书泄露数据被罚20亿;iPhone15将全系支持灵动岛;540万推特用户数据被盗;罗永浩入局tiktok;特斯拉研发改款Model3脸书泄露数据被罚20亿 据报道,脸书因泄露5亿用户数据,被欧洲监管机构罚…

Starday为什么是跨境电商卖家的不二之选?

据国内海关统计显示,近5年来,中国跨境电商规模增长近10倍,年增长率在30%以上,占国际贸易近40%。基于流量模式的跨境电商直播、垂直跨境电商等新模式蓬勃发展,近几年跨境电商一直不断地在深度融合发展,加之疫…

WSL Ubuntu20.04安装pycairo指南

环境说明 wsl Ubuntu20.04 走过的一些可能有用的弯路 由于pycairo要求python3.7,但是之前Ubuntu上有个3.6的python环境,所以就安装了python3.8: sudo apt install python3.8然后python3命令还是链接到python3.6,结果就yongln …

Stateflow状态转移练习

文章目录1.外部转移与内部转移1.1 stateflow1.2 分析2.外部转移内部转移超转移2.1 stateflow2.2 video1.外部转移与内部转移 1.1 stateflow 1.2 分析 首先是 xyz0,然后进入 A 状态,此时 A 的 en 激活,xx1,即 x1其次进入默认状态…

聊天软件im即时通讯源码酷信视酷,在线语音视屏通话端对端加密聊天,支持7端互通带部署教程

APP端有安卓端苹果端,PC端,web端,管理端有PC后台! .产品为独立开发,非网上下载不能用的产品! .高端产品,即时聊天软件技术难度大,请不要拿网络其他聊天软件来对比&#xff0…

多线程,了解-概念-实现方式-常见方法-安全问题-死锁-生产者消费者

了解 简单了解多线程 是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能。 简单了解多线程 简单了解多线程 简单了解多线程 简单了解多线程 概念 线程相关的概念 并行:在同…

【Linux进阶】-- 1.python脚本实现守护进程daemon调度,启停等

"怀斯曼不蒸汽啊"1. Linux守护进程介绍1.1 查看进程2. python指令for linux2.1 运行shell命令3. 代码讲解3.1 创建守护进程文件pre_deal.py3.2 用脚本运行3.3 用一个python程序来管理该任务任务介绍: 首先python创建文件1,作用是创建一个守护进程,内容是持续输出时间…

<C++>手撕搜索二叉树

目录 一、搜索二叉树的性质 二、搜索二叉树的结构定义 三、手撕搜索二叉树非递归 1)Insert() 2)Find() 3)Erase() 4)InOder() 5)BSTree(const BSTree& t) 拷贝构造 6)~BSTree()析构函数 四、手…

【学习笔记65】JavaScript的继承

一、认识继承 function Person(name) {this.name name}Person.prototype.sayName () > {console.log(name)}function Stu(age) {this.age age}const s new Stu(18)console.log(s) // {age: 18} 说明: 想让s这个对象内部有一个name属性, 并且可以使用 sayN…

双功能连接试剂:Alkyne hydrazide,炔烃-酰肼 主要特点进行分享

Alkyne hydrazide物理参数: CAS号:N/A |英文名:Alkyne hydrazide | 中文名:炔烃-酰肼 货号:X-CL-1132 分子式:C6H11ClN2O 分子量:162.62 纯度:95% 外形:淡黄色或白…

企业级的商用远程控制软件有哪些

现在远程控制软件,可选性还是比较大的。针对个人用户市场,也有不少免费软件。 企业用户的需求和个人用户的需求,差别较大。个人用户市场,主要诉求是免费、好用。企业用户,主要关注安全、管理功能、性能、价格等因素。…

为什么建议MySQL在2000W条左右记录分表

为什么建议MySQL在2000W条左右记录分表?这个数量问题并不是绝对的,这是一个相对的数量。在回答这个问题前我们应该先了解MySQL底层是用的什么数据结构来进行数据存储的。 MySQL底层采用的B树进行的数据存储 InnoDB存储引擎最小储存单元是页,…

【Java面试】异常常见面试题

文章目录1. Error 和 Exception 区别是什么?运行时异常和一般异常(受检异常)区别是什么?JVM 是如何处理异常的?throw 和 throws 的区别是什么?final、finally、finalize 有什么区别?NoClassDefFoundError 和 ClassNotF…

OpenMP 快速入门

学习《高性能计算:现代系统与应用实践》(Thomas Sterling,Matthew Anderson,Maciej Brodowicz)第 7 章 OpenMP 的基础 OpenMP OpenMP 是一个 API C、C、Fortran OpenMP 是共享内存的多线程编程模型 共享内存 默认所有…

22年11月-自研-面试题

目录背景题目Activiti回退功能条件分支功能,并行网关、包含网关有没有用到流程流转中,需知会其他人,这些人需同意/做处理(有点流程的感觉),最后所有的意见都要汇总。你的实现思路Redis哪些数据结构&#xf…

STM32实战总结:HAL之低功耗

低功耗的含义不必过多解释,一听就能懂。 低功耗对电池供电产品尤其重要。 STM32的有三种低功耗模式,即睡眠模式、停止模式和待机模式。 在我的印象中,停止不就是关机吗?但并不是。 在系统或电源复位以后,微控制器处于运…

基于最小二乘插值(Least-Squares Interpolation)图像超分辨率重构算法研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、最小二乘图像插值理论与Matlab处理✳️ 三、基于最小二乘插值超分辨重构实验验证✳️ 四、参考文献✳️ 五、Matlab程序获取与验证✳️ 一、引言 图像超分辨率重构技术起源于上世纪60年代Harris和Goodman构造的单帧图像重构方法&#xf…

AutoCAD Electrical 2022—元件的绘制

原理图——图标菜单 选择要插入的元件; 根据实际情况,选择垂直放置还是水平放置,比例大小; 选择一个三极断路器,垂直放置; 点击确定后,点击一根导线,选择断路器另外两个符号是的方向…