当前位置: 首页 > news >正文

真1分钟搞懂缓存穿透、缓存击穿、缓存雪崩

💗推荐阅读文章💗

  • 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》
  • 🌺MySQL系列🌺👉2️⃣《MySQL系列教程》
  • 🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》
  • 🌻SSM框架系列🌻👉4️⃣《SSM框架系列教程》

文章目录

  • 四、缓存解决方案
    • 4.1 缓存穿透
      • 4.1.1 现象:
      • 4.1.2 方案:
    • 4.2 缓存击穿
      • 4.2.1 现象:
      • 4.2.2 方案:
    • 4.3 缓存雪崩
      • 4.3.1 现象:
      • 4.3.2 方案:

四、缓存解决方案

4.1 缓存穿透

4.1.1 现象:

指大量请求来到数据库查询都没有查询到结果,因此不存储在redis中,redis命中率非常低,当redis没有命中,则大量的请求来到了数据库,数据库一直处于被大流量访问状态,很容易压力过载(一般属于恶意攻击)。

在这里插入图片描述

4.1.2 方案:

1、在微服务网关或拦截器中设置逻辑监控,必要时采取封ip操作

2、每次将请求的数据都存入redis中并设置过期时间,设置key-null数据(过期时间设置短点,如1分钟),如果大量请求中存在有重复的数据,那么第二次以后的操作都会查询到redis,减少MySQL压力

3、在网关中增加逻辑校验,筛选掉不规则数据,如id<0的数据

4、bitmap白名单策略,将所有数据id存放在bitmaps中,id作为偏移量,存储0/1表示是否存在,存在则放行,不存在则拦截。(这种策略需要提前将所有的id缓存在bitmap中,效率偏低)

4.2 缓存击穿

4.2.1 现象:

指查询某个key(热点数据)在缓存中没有,但数据库有(一般是缓存时间到期),由于这个key是热点数据,在同一时间有大量用户访问这个key,并发量极高,请求发现redis没有,则全部来到数据查询,造成数据库压力瞬间飙升。

在这里插入图片描述

4.2.2 方案:

1、如果是整个网站中长期处于热点数据的,可以考虑将数据设置为永不过期

2、如果是需要发布某项活动,造成原本不是热点的key,突然变成热点,可以在活动之前将key的过期时间延长至活动结束。(缓存预热)

3、我们知道缓存击穿的原理实在就是大量并发同时来到cache,同时发现cache中没有数据,全部都去数据库获取了,那么我们可以考虑添加互斥锁,如果已经有请求进来获取数据,发现为空,那么就从数据库去获取数据(这段时间是上锁的)。

代码参考:

public String getData(String key) throws InterruptedException {// 首先从缓存读取数据String val = getDataFromRedis(key);// 如果缓存不存在则去数据库获取if (val == null) {// 获取锁if (lock.tryLock()) {// 从数据库获取数据val = getDataFromDB(key);if (val != null) {setCache(key, val);}// 释放锁lock.unlock();} else {// 其他线程获取锁失败,睡眠100毫秒后尝试重新获取Thread.sleep(100);val = getData(key);}} return val;
}

4.3 缓存雪崩

4.3.1 现象:

指某一时间大量缓存过期,请求直接来到数据库,造成数据库压力过载。与缓存击穿不同的是缓存击穿通常是大的并发量访问某一条数据,而某一条数据正好失效。而缓存雪崩是大量的数据同时失效,多个key累加起来的请求流量压力过大。很多数据都查询不到,从而到数据库查询,数据库压力飙升。

在这里插入图片描述

4.3.2 方案:

1、将较为重要的数据设置永不过期

2、将缓存数据过期时间设置为随机,防止同一时间大量缓存失效

相关文章:

真1分钟搞懂缓存穿透、缓存击穿、缓存雪崩

&#x1f497;推荐阅读文章&#x1f497; &#x1f338;JavaSE系列&#x1f338;&#x1f449;1️⃣《JavaSE系列教程》&#x1f33a;MySQL系列&#x1f33a;&#x1f449;2️⃣《MySQL系列教程》&#x1f340;JavaWeb系列&#x1f340;&#x1f449;3️⃣《JavaWeb系列教程》…...

蓝桥刷题总结1

数组三角形 题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径&#xff0c;把路径上面的数加起来可以得到一个和&#xff0c;你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个…...

淘宝商品详情数据接口 关键字搜索接口 请求代码分享

item_get-获得淘宝商品详情item_get_app-获得淘宝app商品详情原数据item_search-按关键字搜索淘宝商品参数说明通用参数说明参数不要乱传&#xff0c;否则不管成功失败都会扣费url说明 https://api-gw.onebound.cn/平台/API类型/ 平台&#xff1a;淘宝&#xff0c;京东等&#…...

【数据结构】链表OJ(二)

Yan-英杰的博客 悟已往之不谏 知来者之可追 目录 一、反转链表 二、合并两个有序链表 三、链表分割 四、链表的回文结构 一、反转链表 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例 3&#xf…...

Linux系统搭建FTP服务器

安装vsftpdyum -y install vsftpd添加FTP用户方式1、添加只允许通过ftp访问的用户useradd -d /home/ftp ftp_user #-d指定用户登录时的启始目录方式2、允许用户登录操作系统usermod -d /home/ftp -s /bin/bash ftp_user #-s指定用户登入后所使用的shell设置用户登录密码passwd …...

MySQL数据同步到 Redis 缓存的几种方法

1 Mysql查完数据&#xff0c;再同步写入到Redis中缺点1&#xff1a;会对接口造成延迟&#xff0c;因为同步写入redis本身就有延迟&#xff0c;并且还要做重试&#xff0c;如果redis写入失败&#xff0c;还需要重试&#xff0c;那就更费时间了。缺点2&#xff1a;不解耦&#xf…...

2023年网络安全比赛--CMS网站渗透中职组(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 1.使用渗透机对服务器信息收集,并将服务器中网站服务端口号作为flag提交; 2.使用渗透机对服务器信息收集,将网站的名称作为flag提交; 3.使用渗透机对服务器渗透,将可渗透页面的名称作为flag提交; 4.使用渗透机对服务器渗透,…...

【蓝桥杯集训·每日一题】AcWing 4309. 消灭老鼠

文章目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解三、知识风暴最大公约数一、题目 1、原题链接 4309. 消灭老鼠 2、题目描述 约翰的农场可以看作一个二维平面。 农场中有 n 个老鼠&#xff0c;在毁坏着农田。 第 i 个老鼠的位置坐标为…...

FPGA实现CSI-2 解码MIPI视频 2line 720P分辨率 OV5647采集 提供工程源码和技术支持

目录1、前言2、Xilinx官方主推的MIPI解码方案3、纯Vhdl方案解码MIPI4、vivado工程介绍5、上板调试验证6、福利&#xff1a;工程代码的获取1、前言 FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI协议了&#xff0c;MIPI解码难度之高&#xff0c;令无数英雄竞折腰…...

JS面试题收集(持续更新好中...)

1.JavaScript 中的垃圾回收机制 定义&#xff1a;指一块被分配的内存既不能使用&#xff0c;又不能回收&#xff0c;直到浏览器进程结束。 JavaScript在创建对象时会为它们分配内存&#xff0c;不再使用时会自动释放内存&#xff0c;这个过程称为垃圾收集。 四种常见的内存泄…...

2023携程面试题

Java I/O 面试前需要准备&#xff1a; 1. Java 八股文&#xff1a;了解常考的题型和回答思路&#xff1b; 2. 算法&#xff1a;刷 100-200 道题&#xff0c;记住刷题最重要的是要理解其思想&#xff0c;不要死记硬背&#xff0c;碰上原题很难&#xff0c;但 大多数的解题思…...

CANoe中使用CAPL函数接口调用Vflash文件

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…...

三天吃透计算机网络面试八股文

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…...

shp数据添加wkt字段并导出成csv,leaflet绘制使用

准备的东西&#xff1a;软件2跟软件3具体怎么有这些软件需要自行百度postgresql postgis相关 1.shp数据 2.软件2 3.软件3 1.数据导入 首先你得有软件2的数据库&#xff0c;即postgresql数据库&#xff0c;然后通过postgis的插件进行连接并导入数据&#xff0c; 导入数据…...

Java——二叉树的最近公共祖先及二叉搜索树介绍

目录 二叉树的最近公共祖先 题目 思路一&#xff1a;如果给定的是一颗二叉搜索树&#xff0c; 思路二&#xff1a;假设是孩子双亲表示法 二叉搜索树 定义Node类 查找 删除 插入 二叉树的最近公共祖先 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百…...

Stable Diffusion加chilloutmixni真人图片生成模型,AI绘图杀疯了

上期图文教程,我们分享过AI绘图大模型Stable Diffusion以及中文版本文心AI绘画大模型的基础知识以及代码实现,截至到目前为止。Stable Diffusion模型已经更新到了V2.1版本,其文生图大模型也越来越火,其在2022年底,由AI绘制的图片被荣为国际大奖,让大家对AI绘画大模型也越…...

Matplotlib 绘图实用大全

本文只介绍最简单基本的画图方法 预设 要想画出来的图有些逼格&#xff0c;首先应该进行如下设置 plt.rcParams[font.sans-serif][SimHei] #画图时显示中文字体 plt.rcParams[axes.unicode_minus] False #防止因修改成中文字符&#xff0c;导致某些 unicode 字符不能…...

MyBatis源码用了哪些设计模式?

MyBatis源码用了哪些设计模式&#xff1f;前言一、创建型模式工厂模式单例模式建造者模式二、结构型模式适配器模式代理模式组合模式装饰器模式三、行为型模式模板模式策略模式迭代器模式总结前言 在 MyBatis 的两万多行的框架源码中&#xff0c;使用了大量的设计模式对工程架…...

【16.整数转罗马数字】

罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例…...

前端小技巧

1.html 1.1 网站自动刷新 应用场景&#xff1a; 网页定期自动刷新&#xff08;现在基本淘汰了&#xff0c;采用ajax&#xff09;&#xff1b;自动跳转到指定页面&#xff0c;这个自动跳转的好处就是不需要JS调用&#xff0c;属于纯html网页自动跳转 v7-网站自动刷新 你可以…...

Servlet2.0

文章目录更方便的部署方式安装插件使用插件验证程序常见访问出错的解决方案404错误405错误500错误空白页面无法访问此网站在文章 TomcatServlet初识中&#xff0c;我们通过七个大的步骤才可以完成一个简单的Servlet程序&#xff0c;这个过程无疑是非常繁琐的&#xff0c;那么我…...

【c++】继承

目录 一、继承的表现 子类对父类成员的访问权限 二、父类与子类之间的相互赋值 三、继承的作用域 如果是父类和子类构成隐藏呢&#xff1f; 四、子类的成员函数怎么写 1.default构造函数 2.析构函数 所以析构函数不需要我们显式调用。 五、继承与友元函数 六、继承与静…...

minio安装配置和使用(二)客户端安装

安装minio客户端mcli 命令如下&#xff1a; dnf install https://dl.minio.org.cn/client/mc/release/linux-amd64/mcli-20230128202938.0.0.x86_64.rpm 安装完成&#xff0c;在/usr/local/bin/下新增了mcli命令 mcli是对minio进行管理的命令。功能丰富&#xff0c; 基本格式…...

【如何使用Arduino设置GRBL和控制CNC机床】

【如何使用Arduino设置GRBL和控制CNC机床】 前言1. 什么是GRBL?2. 所需硬件3. 如何安装GRBL4. GRBL 配置5. GRBL 控制器5.1 如何使用通用 G 代码发送器5.2 波特率5.3 电机方向5.4 步进比例系数5.5 限位开关5.6 数控机床的归位设置6. 结论前言 如果您正在考虑或正在制造自己的…...

项目测试——博客系统

文章目录项目测试——博客系统项目简介项目功能测试计划web自动化测试1. 测试用例2.web自动化测试说明项目测试——博客系统 项目简介 博客系统主要分为8大模块&#xff0c;分别是注册页&#xff0c;登录页&#xff0c;编辑页&#xff0c;修改页&#xff0c;个人主页&#xf…...

【C习题】经典数组与指针面试题(万字)

文章目录一. 一维数组二.字符数组三.字符指针四.二维数组五.指针笔试题一. 一维数组 首先说明&#xff1a;需熟记以下三个规则。 规则1.&数组名指的是取出整个数组的地址。 规则2.数组名被单独放在sizeof内部&#xff0c;计算的是整个数组的大小。 说明&#xff1a;这里的单…...

【ArcGIS Pro二次开发】(13):ProWindow的用法

ProWindow是ArcGIS Pro SDK中的一个WPF控件&#xff0c;具有以下特点&#xff1a; 可扩展性&#xff1a;ProWindow提供了丰富的API和样式&#xff0c;可以轻松地扩展和自定义ArcGIS Pro应用程序的UI。 可定制性&#xff1a;ProWindow支持多种UI控件和布局方式&#xff0c;可以…...

HTML/CSS/JS 基本语法

前端一、HTNL1、文件结构2、文本标签&#xff08;1&#xff09;块元素&#xff1a;div&#xff08;2&#xff09;行内元素&#xff1a;span&#xff08;3&#xff09;格式标签3、图片、音频、视频&#xff08;1&#xff09;图片&#xff08;2&#xff09;音频< audio >&a…...

对于从事芯片行业的人来说,有哪些知识是需要储备的?

近两年芯片行业大火&#xff0c;不少同学想要转行&#xff0c;却不知道该如何下手&#xff0c;需要学习哪些基础知识&#xff0c;下面就来看看资深工程师怎么说&#xff1f; 随着工艺的发展&#xff0c;芯片肯定是尺寸越来越小&#xff0c;至于小到什么样的程度是极限&#xf…...

测试场景设计

测试场景设计 又叫做场景法。其实对于场景法是测试用例中面临最多的&#xff0c;但是这种模式不是很容易总结&#xff0c;有时候是基于经验&#xff0c;有时候是我们对系统的了解。所以在这种情况下&#xff0c;我们强硬的用场景法对其进行规范。 场景法原理 现在的软件几乎…...

武汉企业建站营销/互联网品牌宣传推广服务公司

Chrome保存整个网页为图片(终极解决方案!)参考文章&#xff1a; &#xff08;1&#xff09;Chrome保存整个网页为图片(终极解决方案!) &#xff08;2&#xff09;https://www.cnblogs.com/ChouXiaoShou/p/ChromeScreenshot.html 备忘一下。...

网站开发外包平台/推广网站模板

最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究&#xff0c;把各自的查询的语句贴出来供大家学习..... &#xff08;一&#xff09;、 mysql的分页查询 mysql的分页查询是最简单的&#xff0c;借助关键字limit即可实现查询&#xff0c;查询语句通式&#xff1a…...

百度做网站和推广效果怎么样/国内建站平台

以下几种方法可以都试用一下&#xff0c;思路都差不多。 EXE文件关联被修改后&#xff0c;情形是很吓人的。某回给一个企业修理此类状况&#xff0c;公司财务吓得几乎面无人色&#xff0c;以为所有的东西都完蛋了。经我一番巧妙折腾&#xff0c;症状消失&#xff0c;才如释重负…...

php做动态网站/网站优化软件费用

PHP中的pthread拓展使用发布时间&#xff1a;2020-05-08 10:24:26来源&#xff1a;亿速云阅读&#xff1a;59作者&#xff1a;Leah今天小编就为大家带来一篇PHP中的pthread拓展使用的文章。小编觉得挺不错的&#xff0c;为此分享给大家做个参考。一起跟随小编过来看看吧。PHP是…...

手机网站生成app软件/媒介

前言&#xff1a;我个人觉得aptana3.2 for eclipse依然不够强大&#xff0c;有很多提示依然出不来&#xff0c;相比而言&#xff0c;我现在最强的应该是spket。 这里简单说下思路吧&#xff1a; 1、http://www.cnblogs.com/chang290/archive/2013/02/17/2913936.html 这个帖子基…...

网站创建工具/拉新推广赚钱的app

首先了解下OGNL的概念&#xff1a; OGNL是Object-Graph Navigation Language的缩写&#xff0c;全称为对象图导航语言&#xff0c;是一种功能强大的表达式语言&#xff0c;它通过简单一致的语法&#xff0c;可以任意存取对象的属性或者调用对象的方法&#xff0c;能够遍历整个对…...