Redis01-缓存击穿、穿透和雪崩
目录
开场白-追命3连
使用场景
01缓存穿透场景与方案
02布隆过滤器
03缓存击穿场景与方案
04缓存雪崩场景与方案
开场白-追命3连
-
看你项目中有说用到Redis,都是哪些场景使用了Redis呢?
-
如果发生了缓存穿透、击穿、雪崩如何应对呢?缓存中数据的持久化和双写一致怎么实现的呢?数据过期和淘汰策略了解么?
-
能说说Redis实现分布式锁的方案和原理么?
使用场景
01缓存穿透场景与方案
使用缓存是一种常见的性能优化和数据管理策略,它可以带来许多好处:
-
提高性能:缓存允许将常用或重复访问的数据存储在快速访问的位置,通常是内存中。这可以大大减少从慢速数据存储系统(如数据库)中读取数据的次数,从而显著提高应用程序的响应时间和性能。
-
减少资源消耗:读取和计算数据通常需要消耗计算资源和网络带宽。通过将结果缓存,可以减少这些资源的消耗,提高系统的效率。
-
降低数据库负载:数据库是许多应用程序的关键数据存储,频繁的数据库查询可以增加数据库的负载。通过缓存常用查询结果,可以减轻数据库的压力,提高数据库的可伸缩性。
-
减少网络延迟:从远程数据源(如云存储或远程API)获取数据通常需要较长的网络延迟。通过使用缓存,可以将数据放置在更接近应用程序的位置,从而降低网络延迟。
-
提高可伸缩性:使用缓存可以降低后端数据存储的压力,从而使应用程序更容易扩展,支持更多的用户和请求。
-
应对高并发:在高并发的情况下,数据库或其他数据源可能无法及时响应请求。缓存可以缓解这种情况,因为它可以快速提供响应,而不必等待慢速数据源的响应。
-
提高用户体验:快速加载和响应时间可以显著提高用户体验,减少等待时间,增加用户满意度。
-
实现断点恢复:在某些应用中,缓存可以用于存储临时状态或进度,以支持断点续传或恢复操作,如文件上传或长时间运行的任务。
-
保护后端资源:通过缓存来限制对某些资源的访问,可以防止滥用或意外的流量对后端资源的过度消耗。
-
离线访问:缓存可以支持离线访问,使应用程序在没有连接到主要数据源时仍能够提供基本功能。
缓存穿透是一种缓存相关的性能问题,指的是恶意请求,通过访问缓存中不存在的数据,大量频繁地请求数据库连接,消耗资源。缓存穿透的明显特征:恶意大量大规模地请求不存在的数据。
解决方案1:针对不存在的数据,使用null存入缓存。
-
优点:方案方便简单
-
缺点:会消耗大量的内存,有可能引起数据不一致的问题(缓存null的同时插入了真实值,数据就不一致了)
解决方案2:使用布隆过滤器拦截
-
优点:内存占用少,没有多余key
-
缺点:设计方案稍微复杂,存在误判
02布隆过滤器
布隆过滤器是一种用于快速检测某个元素是否存在于集合中的数据结构。在缓存层之前使用布隆过滤器,可以快速拦截那些明显不存在于数据源中的请求。在系统启动或数据更新后,就可以预热缓存,将热门数据加载到缓存中。
布隆过滤器实质上是一种位图(bitmap):相当于是一个以(bit)位为单位的数组,数组中每个单元只能存储二进制数0或者1。
-
存储数据:通过多个hash函数获取hash值,根据hash计算数组对应位置改为1
-
查询数据:使用相同hash函数获取hash值,判断对应位置是否都为1
误判:当查询并不存在的“武侯区”时,会返回错误的判断结果。
误判率:数组越小误判率越高,数组越大误判率越低,但越大的数组就带来了越多的内存消耗。(使用布隆过滤器的情况下默认允许误判率小于等于5%)
03缓存击穿场景与方案
缓存击穿是指:当一个缓存key设置了过期时间,而在过期的那一瞬间有大量并发请求同时访问这个key,导致请求穿透缓存直接访问数据库,而这个瞬间是有可能把数据库压垮的。
缓存没有命中查询数据库之后不是会写入缓存么?——缓存击穿的瞬间就是发生在这个写入的间隔时间内,哪怕只是10ms
解决方案1:互斥锁,在缓存中设置一个互斥锁,用于保护数据的加载过程,同时避免多个请求并发操作数据。
-
优点:强一致性
-
缺点:互斥锁导致资源消耗,性能差
解决方案2:逻辑过期,设置热门数据的缓存永不过期,或者设置一个很长的过期时间,以确保数据不会频繁失效。
-
优点:高可用性,性能好
-
缺点:不能保证保证数据绝对一直
04缓存雪崩场景与方案
缓存雪崩是指在某个时间点,缓存中的大量数据同时失效或过期,导致大量请求直接访问后端数据源,对后端系统造成巨大压力的情况。缓存雪崩通常发生在以下场景:
-
大规模数据同时过期:在某个时间点,大量缓存数据的过期时间到达,导致这些数据在短时间内同时失效。
-
系统重启:当系统重新启动或缓存服务重启时,所有缓存数据都会失效,导致大量请求访问后端数据源。
-
热门数据失效:缓存中的热门数据在某个时间点过期,因此大量请求同时访问这些数据。
解决方案1:针对过期时间->通过随机设置缓存数据的过期时间,避免大量数据同时过期。
解决方案2:针对Redis宕机->采用集群的方式部署Redis服务。
解决方案3:针对热门数据失效->在系统启动或低峰期,对热门数据进行预加载到缓存中,以降低高峰时段缓存失效的风险。
解决方案4:使用多级缓存方案,本地缓存+分布式缓存。
解决方案5:兜底策略->限流降级或者熔断,在高峰期对请求进行限流,确保不会过多请求直接访问后端。
相关文章:

Redis01-缓存击穿、穿透和雪崩
目录 开场白-追命3连 使用场景 01缓存穿透场景与方案 02布隆过滤器 03缓存击穿场景与方案 04缓存雪崩场景与方案 开场白-追命3连 看你项目中有说用到Redis,都是哪些场景使用了Redis呢? 如果发生了缓存穿透、击穿、雪崩如何应对呢?缓存…...

multiple kernel learning(MKL)多核学习
历史上之所以会出现多核学习(MKL)这个词,是因为在深度学习流行起来以前,kernel是处理非线性的默认方法,那个年代优化一个非线性函数不容易,每加一层复杂性可能就需要多设计一个优化算法,MKL就是…...
JS匿名函数之函数表达式与立即执行函数
匿名函数是什么?和具名函数有什么区别?让我为大家介绍一下吧! 没有名字的函数,无法直接使用 一.函数表达式 将匿名函数赋值给一个变量,并且通过变量名去调用,我们将这个称为函数表达式 语法: …...

WebGL:基础练习 / 简单学习 / demo / canvas3D
一、前置内容 canvas:理解canvas / 基础使用 / 实用demo-CSDN博客 WebGL:开始学习 / 理解 WebGL / WebGL 需要掌握哪些知识 / 应用领域 / 前端值得学WebGL吗_webgl培训-CSDN博客 二、在线运行HTML 用来运行WebGL代码,粘贴--运行ÿ…...

Python基础入门例程44-NP44 判断列表是否为空(条件语句)
最近的博文: Python基础入门例程43-NP43 判断布尔值(条件语句)-CSDN博客 Python基础入门例程42-NP42 公式计算器(运算符)-CSDN博客 Python基础入门例程41-NP41 二进制位运算(运算符)-CSDN博客…...
【每日一题Day369】LC187重复的DNA序列 | 字符串哈希
重复的DNA序列【LC187】 DNA序列 由一系列核苷酸组成,缩写为 A, C, G 和 T.。 例如,"ACGAATTCCG" 是一个 DNA序列 。 在研究 DNA 时,识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA…...
服务器密码机主要功能及特点 安当加密
服务器密码机的主要功能包括: 数据加密:密码机使用各种加密算法对数据进行加密,确保只有拥有正确密钥的接收者才能解密和查看数据。数据解密:密码机使用相应的解密算法和密钥对已加密的数据进行解密,使其恢复成原始数据…...

RIP路由配置
RIP路由配置步骤与命令: 1.启用RIP路由:router rip 2.通告直连网络:network 直连网络 3.启用RIPv2版本:version 2 4.禁用自动汇总:no auto-summary 注意:静态路由通告远程网络,动态路由通告…...

尚硅谷Docker基础篇和Dockerfile超详细整合笔记
Docker基础篇DockerFile Docker:您要如何确保应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复?而这个就是使用容器。Docker解决了运行环境和配置问题…...

JavaScript_Date对象_实例方法_get类
计算这一年还剩多少天: <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Document&…...
Go语言在区块链开发中的应用
引言 区块链是近年来备受关注的技术领域,它不仅改变了传统的数据交换和存储方式,还为各种应用场景提供了全新的解决方案。而Go语言(Golang)作为一门简洁、高效的编程语言,正逐渐成为开发区块链应用的首选语言。本文将…...

S4.2.4.5 Fast Training Sequence (FTS)
一 本章节主讲知识点 1.1 FTS的用途和实现注意 二 本章节原文翻译 Fast Training Sequence (FTS) 主要用于在L0s->L0跳转的过程中,让Receiver 检测到电气空闲退出,以及实现bit 和 symbol lock。 2.1 Gen1 and Gen2 速率 对于Gen1/2 FTS的组成如下…...
Gitlab CICD实用技巧汇总
关于.gitlab-ci.yml的实用配置 1、stage参数 stages: - build - test - deploy 相同stage的作业会并行执行,有一个失败,则认为这个stage失败。 不同stage的作业会按序执行,前面stage有失败,后续stage不会继续执行。 可以使用ne…...

JavaSpringbootMySQL高校实训管理平台01557-计算机毕业设计项目选题推荐(附源码)
目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 高校实训管理平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系…...

初阶JavaEE(14)表白墙程序
接上次博客:初阶JavaEE(13)(安装、配置:Smart Tomcat;访问出错怎么办?Servlet初识、调试、运行;HttpServlet:HttpServlet;HttpServletResponse)-C…...

算法设计与分析第二章作业
1. 描述最大字段和的分治算法 题目 思路 判断最大子段和,可以用分治的思想,每次将序列一分为二,选择两个序列的最大子段和。 但是这里还有一种可能,就是子段可以横跨两个子序列,所以我们的最大子段和就是࿱…...
《视觉SLAM十四讲》-- 三维空间的刚体运动
文章目录 02 三维空间的刚体运动2.0 机器人位姿表述2.1 点和坐标系2.1.1 三维坐标系有关表述2.1.2 坐标系变换 2.2 旋转向量和欧拉角2.2.1 旋转向量2.2.2 欧拉角 2.3 四元数2.3.1 四元数的定义2.3.2 四元数的计算2.3.3 四元数表示旋转2.3.4 四元数与其他旋转表示法的转换 2.4 相…...

关于iOS:如何使用SwiftUI调整图片大小?
How to resize Image with SwiftUI? 我在Assets.xcassets中拥有很大的形象。 如何使用SwiftUI调整图像大小以缩小图像? 我试图设置框架,但不起作用: 1 2 Image(room.thumbnailImage) .frame(width: 32.0, height: 32.0) 在Image上应用…...

【MySQL】数据库MySQL基础知识与操作
作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《MySQL》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&a…...
vim手册(vim cheatsheet)
vim手册(vim cheatsheet) 1. 命令模式 1). 移动光标 在命令模式下,可以使用以下命令来移动光标: - h:向左移动一个字符。 - j:向下移动一行。 - k:向上移动一行。 - l:向右移动一个…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...