redis 缓存穿透 缓存击穿 缓存雪崩

redis 缓存穿透 缓存击穿 缓存雪崩

1.缓存穿透

前提:应用服务器压力过大 > 导致redis命中率过低(查询不到缓存)> 一直查询数据库

描述:1.redis查询不到数据 2.出现很多非正常url访问(一般出现这些问题都是恶意攻击网站造成)

解决方案:

  • 方案1: 对于数据库中不存在的数据, 也对其在缓存中设置默认值Null,为避免占用资源,一般过期时间会比较短;

  • 方案2: 可以设置一些过滤规则, 如布隆过滤器

(目前主流的一种的载体就是布隆过滤器. 布隆过滤器是一种概率型数据结构,特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”.

相比于传统的 List、Set、Map 等数据结构,布隆过滤器是一个bit数组, 它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。)

  • 方案3:进行实时监控(对一直恶意访问的人设置黑名单)

2.缓存击穿

前提:

  • 1.数据库访问压力瞬时增加

  • 2.redis里面没有出现大量key过期

  • 3.redis正常运行

描述:某一个热点 key,在缓存过期的一瞬间,同时有大量的请求打进来,由于此时缓存过期了,所以请求最终都会走到数据库,造成瞬时数据库请求量大、压力骤增,甚至可能打垮数据库。

解决方案:

  • 方案1:预先设置热门数据:在redis高峰访问之前,把一些热门数据提前存入到redis里面,加大这些热门数据key的时长

  • 方案2:实时调整:现场监控那些数据热门,实时调整key的过期时长

  • 方案3:使用锁:并发的多个请求中,只有第一个请求线程能拿到锁并执行数据库查询操作,其他的线程拿不到锁就阻塞等着,等到第一个线程将数据写入缓存后,直接走缓存。

3.缓存雪崩

前提:数据库压力变大服务器崩溃

描述:大量的热点 key 设置了相同的过期时间,导在缓存在同一时刻全部失效,造成瞬时数据库请求量大、压力骤增,引起雪崩,甚至导致数据库被打挂。

解决方案:

1、过期时间打散。既然是大量缓存集中失效,那最容易想到就是让他们不集中生效。可以给缓存的过期时间时加上一个随机值时间,使得每个 key 的过期时间分布开来,不会集中在同一时刻失效。

2、设置过期标志更新缓存。记录缓存数据是否过期(设置提前量)。如果过期会触发通知另外的线程在后台去更新实际key的缓存

3、加互斥锁。该方式和缓存击穿一样,按 key 维度加锁,对于同一个 key,只允许一个线程去计算,其他线程原地阻塞等待第一个线程的计算结果,然后直接走缓存即可。

4、构建多级缓存架构。nginx缓存 + redis缓存 + 其它缓存(ehcache等)

5、限流降级

6、缓存预热:在实际开发中,我们可以利用大数据统计用户访问的热点数据,在项目启动时将这些热点数据提前查询并保存到Redis中。

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

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

相关文章

独立站运营简历怎么写?如何做自建站履历?编写独立站经营履历的要点是什么?如何在简历中呈现个人自建站运营经验?

作为一名独立站运营者,一份出色的简历是展示自己能力的重要途径。一个精心制作的独立站运营简历可以为宝子们赢得心仪职位的机会。接下来,我们将介绍如何写一份引人注目的独立站运营简历,从而吸引雇主的目光。 独立站运营简历:个…

微服务——统一网关Getway

为什么需要网关? 网关的两种实现: 网关Getway——快速入门 步骤一 网关背身也是一个微服务,需要注册到nacos中去 步骤二 成功运行后 可以通过网关进行请求转发到对应服务。 流程如下: 路由断言工厂 网关路由可以配置的东西有如下。 spri…

【深度学习】yolov 图片训练的时候的遇到的warning: corrupt JPEG restored and saved

报错原因 是图片在dataset.py 走验证时报的错误。 if im.format.lower() in (jpg, jpeg):with open(im_file, rb) as f:f.seek(-2, 2)if f.read() ! b\xff\xd9: # corrupt JPEGImageOps.exif_transpose(Image.open(im_file)).save(im_file, JPEG, subsampling0, quality100)m…

Redis 九种数据类型的基本操作

一、redis9种数据类型的基本操作 ①key操作 #查找所有的key 127.0.0.1:6379> keys * 1) "pop" 2) "mylist" 3) "lpl" 4) "myset" #设置key的过期时间 返回1表示执行成功,0表示失败,出现问题 127.0.0.1:6379…

Qt Creator mainwindow.obj:-1: error: LNK2019

构建的时候报错: mainwindow.obj:-1: error: LNK2019: 无法解析的外部符号 "public: __thiscall mynotedig::mynotedig(class QWidget *)" (??0mynotedigQAEPAVQWidgetZ),该符号在函数 "public: void __thiscall MainWindow::mynoteab…

VMPWN的入门级别题目详解(一)

实验一 VMPWN1 题目简介 这是一道基础的VM相关题目,VMPWN的入门级别题目。前面提到VMPWN一般都是接收字节码然后对字节码进行解析,但是这道题目不接受字节码,它接收字节码的更高一级语言:汇编。程序直接接收类似”mov”、”add”…

前端面试题:探索前沿技术与知识深度的关键

在前端开发领域,面试是评估候选人技能和知识水平的重要环节。面试题涵盖了各个方面的前端知识,旨在考察候选人的理解能力和解决问题的能力。本文将介绍一些常见的前端面试题,并结合具体实例说明,帮助读者更好地理解和准备前端面试…

Dockerfile 创建镜像,构建LNMP+wordpress架构

目录 一、Dockerfile 构建镜像 1.Dockerfile 构建 nginx镜像 1.1创建 nginx Dockerfile 目录 1.2编写 Dockerfile 文件 1.3构建nginx镜像 2.Dockerfile 构建 mysql 镜像 2.1创建 mysql Dockerfile 目录 2.2修改mysql配置文件 2.3编写 Dockerfile 文件 2.4构建mysql镜…

[论文笔记] LLM数据集——金融数据集

一、chatglm_金融 ModelScope 魔搭社区 请将modelscope sdk升级到v1.7.2rc0,执行: ​ pip3 install "modelscope1.7.2rc0" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html # 方式1 git clone http://www.modelscope…

Cesium态势标绘专题-圆角矩形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

[RabbitMQ] RabbitMQ简单概述,用法和交换机模型

MQ概述: Message Queue(消息队列),实在消息的传输过程中保存消息的容器,都用于分布式系统之间进行通信 分布式系统通信的两种方式:直接远程调用 和 借助第三昂 完成间接通信 发送方称谓生产者,接收方称为消费者 MQ优…

JMeter基础入门教程之CSV数据文件设置CSV Data Set Config

最近在做压力测试,登录功能用到了配置元件:CSV 数据文件设置,可以将登录用户名和密码放在一个csv文件中,然后通过CSV数据文件设置元件读取出来,用来做压测。 一、CSV文件 CSV文件小知识分享:是指"逗号…

POC CPU 单核性能基准测试 Linux bash 下的简单测试用例 bc计算兀

指令 time echo "scale5000;4*a(1)" | bc -l -q 通过耗时简单评估CPU单核性能 测试环境一 yeqiangyeqiang-MS-7B23:/opt/cpu2006$ cat /etc/os-release PRETTY_NAME"Ubuntu 22.04.2 LTS" NAME"Ubuntu" VERSION_ID"22.04" VERSION&…

leetcode 620. 有趣的电影

# Write your MySQL query statement below select * from Cinema where id%21 and description !boring order by rating descid%21是筛选奇数的条件description !‘boring’ 是筛选不无聊的条件order by rating desc 按评分由大到小排序

Ubuntu 下安装软件,卸载,查看已经安装的软件

参考网址:http://wiki.ubuntu.org.cn/UbuntuSkills 一般的安装程序用三种: .deb 和.rpm 这两种安装文件 .bundle 这是二进制的安装文件  而 tar.gz 这类的只是压缩包(相当于 .rar,.zip 压缩包一样),如果此类文件是程序的话&a…

BP神经网络数据分类——语音特征信号分类(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 BP神经网络是一种常见的人工神经网络,用于数据分类和回归等任务。在语音特征信号分类中,BP神经网络可…

qt画图大卫三角形电力

直接上code void paintEvent(QPaintEvent *event) {Q_UNUSED(event); QPainter painter(this); QRect rect0 = QRect(0,0,500,500);painter.drawRect(rect0);QRect rectB = QRect(-1,-1,501,501);painter.drawRect(rectB);//画三角形QLine line1 = QLine(QPoint(250.0f,80.0f),…

Android11 相机拍照权限,以及解决resolveActivity返回null

一、配置拍照和读写权限 <uses-permission android:name"android.permission.CAMERA"/> <uses-feature android:name"android.hardware.camera" /><uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/&…

通过RPM方式安装,升级,卸载,以及配置使用MySQL

通过RPM方式安装&#xff0c;升级&#xff0c;卸载&#xff0c;以及配置使用MySQL 一、下载 MySQL是一种开源的关系数据库管理系统&#xff0c;被广泛应用于各种业务应用中。本文将讲解如何下载和安装MySQL的rpm安装包。下载rmp安装包有多种方式&#xff1a; 1、可以到MySQL的…

嵌入式C常用关键字解析

1、static关键字的作用 修饰局部变量 作用域&#xff1a;无变化 生命周期&#xff1a;函数--->程序&#xff08;数据段&#xff09; 特点&#xff1a;只初始化一次 修饰全局变量 作用域&#xff1a;整个工程----->本模块 生命周期&#xff1a;无变化 修饰函数 作…