缓存穿透和缓存击穿、缓存雪崩

news2025/1/19 3:12:01

一、Redis作为一个缓存中间件是如何工作的?

架构图如下

过程如下

客户端发起一个查询请求的时候,首先去缓存中查询,如果数据在缓存中存在,则直接将缓存中数据返回给客户端;如果数据在缓存中不存在,则继续查询数据库,若数据库在数据库中存在,则直接将数据放入缓存中并返回给客户端。如果在数据库中也不存在,则直接返回null给客户端。

缓存穿透

定义

指查询一个缓存中和数据库中都不存在的数据,导致每次都会透过缓存,直接查库,最后返回空。

用户发起多次请求这条不存在的数据时,对数据库造成的压力就非常大。

解决方案

(1)缓存空对象

当数据库中查不到数据时,我缓存了一个空对象,给这个空对象的缓存设置一个过期时间,这样下次再查询该数据时候,就可以直接从缓存中拿到,从而减小数据库压力的目的。

(2)使用布隆过滤器

缓存击穿

定义

当缓存中某个热点数据过期了,在热点数据重新载入缓存之前,有大量的查询请求穿过缓存,直接查询数据库。导致数据库压力骤增,造成大量请求阻塞,甚至直接挂掉。

解决方案

(1)设置key永不过期

(2)使用分布锁

锁的对象时key,这样查询同一个key的请求并发进来时,只有一个请求获取到锁,获取到锁的线程查询数据库,将查询到结果放入缓存中,然后释放锁,此时锁等待的请求即可继续执行,由于缓存中已经存在数据,故直接获取数据返回,并不会查询数据库。

缓存雪崩

定义

当缓存中大量的key在同一时刻过期,或者Redis直接宕机,导致大量的查询请求全部到达数据库,造成数据库查询压力骤增,甚至直接挂掉。

解决问题

(1)打散每个key的过期时间

(2)redis高可用方案部署

l如: 主从、哨兵、Redis集群

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

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

相关文章

嵌入式知识点-SPI通讯

该文原自 : 正点原子 01 SPI概述 SPI (Serial Peripheralinterface),顾名思义就是串行外围设备接口。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同…

网络营销培训完能达到什么水平?学完能创业吗?

网络营销本身就是一门创业的技术,很多人学习网络营销,往往担心学完以后技术达不到,再工作几年才可以创业,实际这是错误的理解,那么,网络营销培训完能达到什么水平?新手学员参加网络营销培训&…

MAX 10 10M50 FPGA(10M50DDF256I7G)10M50DDF484C8G/10M50DDF484I7G

MAX 10器件是单芯片、非易失性低成本可编程逻辑器件(pld),用于集成最优的系统组件集。MAX 10设备的亮点包括:内部存储双配置闪存用户闪存即时支持集成模数转换器(adc)支持Nios II单芯片软核处理器该器件设备是系统管理、I/O扩展、通信控制平面、工业、汽…

Spark BlockManager数据存储与管理机制

BlockManager是整个Spark底层负责数据存储与管理的一个组件,Driver和Executor的所有数据都由对应的BlockManager进行管理。 Driver上有BlockManagerMaster,负责对各个节点上的BlockManager内部管理的数据的元数据进行维护,比如block的增删改等…

SpringBoot如何自定义一个starter

SpringBoot starter,大家应该在平常写项目中应该非常熟悉,很多依赖都会提供集成SpringBoot的依赖,这样我们用起来就非常顺手,开箱就能用,那如何自定义一个starter呢? SpringBoot starter SpringBoot中的一…

【C++初阶】2. 类和对象_1

1. 面向过程和面向对象的初步认识 2. 类的引入 C语言结构体中只能定义变量,在C中,结构体内不仅可以定义变量,也可以定义函数。比如: 之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量&#…

Matlab深度学习实战二:AlexNet图像分类篇提供花分类这里以分二类演示且matlab提供模型框架详细操作流程

1.花数据集简介下载与准备 2.matlab搭建模型 3.matlab软件的操作过程: (1)界面操作 (2)深度学习设计器使用 (3)图像数据导入 (4)训练可视化 一、花数据集简介下载与准备…

学生档案管理系统的设计与实现

技术:Java、JSP等摘要:本设计是为托普学院学生档案的管理实现电子化而设计的,系统开发采用J2EE技术,数据库采用了SQL Server 2005,因而系统具有很好的扩展性、可移植性,实现了教学资源的信息化管理。主要功…

【Python学习笔记】第二十七节 Python 多线程

一、进程和线程进程:是程序的一次执行,每个进程都有自己的地址空间、内存、数据栈及其他记录运行轨迹的辅助数据。线程:所有的线程都运行在同一个进程当中,共享相同的运行环境。线程有开始、顺序执行和结束三个部分, …

CANFDNET-200U-UDP配置与数据收发控制

一、启动ZCANPRP,打开设备管理页面,选择类型CANFDNET-200U-UDP,如图1 图1 二、打开设备,启动,在相应页面如图2,配置协议,CANFD 加速,本地端口,IP地址,工作端口。 图2 三、发送相应数…

单元测试框架Mockito落地实践分享

一、序言 针对功能做测试的时候,我们经常会有单元测试和集成测试,在实际开发过程中发现有很多童鞋经常混淆这两个内容,在分享Mockito使用过程前先区分这两个概念。 二、测试分类和区别 所谓单元测试,其实就是对单个方法内部逻辑…

Nacos 2.2.0支持postgresql数据库

github地址&#xff1a;个人仓库本文基于扩展源码的方式进行的集成&#xff0c;官方推荐的方式为&#xff1a;扩展插件包源码修改1.1根pom增加postgresql依赖<postgresql.version>42.5.1</postgresql.version><dependency><groupId>org.postgresql<…

C语言数组详解

写在前面 在初识C语言的博客中我们已经知道什么是数组了,并且可以基本的使用,今天我们来详细的谈谈数组是什么,并且实现两个比较好玩的小程序. 数组 数组是什么?C语言中给了数组的定义:一组相同类型元素的集合.我们已经在初始C语言那里已经说过了.我们把下面的一个连续的空…

【全网最细PAT题解】【PAT乙】1049 数列的片段和(思路详细解释)

题目链接 1049 数列的片段和 题目描述 给定一个正数数列&#xff0c;我们可以从中截取任意的连续的几个数&#xff0c;称为片段。例如&#xff0c;给定数列 { 0.1, 0.2, 0.3, 0.4 }&#xff0c;我们有 (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3)…

首发,pm3包,一个用于多组(3组)倾向评分匹配的R包

目前&#xff0c;本人写的第二个R包pm3包已经正式在CRAN上线&#xff0c;用于3组倾向评分匹配&#xff0c;只能3组不能多也不能少。 可以使用以下代码安装 install.packages("pm3")什么是倾向性评分匹配&#xff1f;倾向评分匹配&#xff08;Propensity Score Match…

MQ-7一氧化碳传感器模块功能实现(STM32)

认识MQ-7模块与其工作原理 首先来认识MQ-7模块&#xff0c;MQ-7可以检测空气中的一氧化碳&#xff08;CO&#xff09;浓度。他采用半导体气敏元件来检测CO的气体浓度&#xff0c;其灵敏度高、反应速度快、响应时间短、成本低廉等特点使得它被广泛应用于智能家居、工业自动化、环…

Leetcode.2373 矩阵中的局部最大值

题目链接 Leetcode.2373 矩阵中的局部最大值 Rating &#xff1a; 1331 题目描述 给你一个大小为 n x n的整数矩阵 grid。 生成一个大小为 (n - 2) x (n - 2)的整数矩阵 maxLocal&#xff0c;并满足&#xff1a; maxLocal[i][j]等于 grid中以 i 1行和 j 1列为中心的 3 x 3…

线段树模板初讲

线段树模板初讲 文章目录线段树模板初讲引入数据结构操作(以求和为例)pushupbuild单点操作&#xff0c;区间查询modifyquery区间操作&#xff0c;区间操作pushdownmodifyquery例题AcWing 1275. 最大数思路代码AcWing 243. 一个简单的整数问题2思路代码总结引入 线段树是算法竞…

systemV共享内存

systemV共享内存 共享内存区是最快的IPC形式。共享内存的大小一般是4KB的整数倍&#xff0c;因为系统分配共享内存是以4KB为单位的&#xff08;Page&#xff09;&#xff01;4KB也是划分内存块的基本单位。 之前学的管道&#xff0c;是通过文件系统来实现让不同的进程看到同一…

通用SQL查询分析器

技术&#xff1a;Java、JSP等摘要&#xff1a;本文主要针对当前很多软件都无法实现跨数据库、跨平台来执行sql语句而用户又仅需做一些基本的增删改查操作的矛盾&#xff0c;设计了一个能够跨平台跨数据库的软件。此软件是一个通用SQL查询分析器&#xff0c;利用java语言本身的跨…