Redis---缓存穿透、缓存雪崩

【Redis缓存机制】缓存更新、缓存穿透、缓存雪崩、缓存击穿 当缓存区缓存了用户信息后,客户端就都会从redis中访问读取数据了。而如果这时候用户更新了数据库中的值,就会导致数据库存储的数据与redis存储数据不一致,在这之后进行读写操作就会发生各种意想不到的错误了因此,当我们要对数据库数据进行更新时,也要尽可能让edis中的数据也能跟着变化,避免用户读到错误的信息缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样每次查询缓存都不会命中,最后都会对数据库进行查询。就像是缓存被穿透了一样,每次请求都会直接到达数据库。 阅读详情

目录

1. 缓存穿透

如何避免?

如何选择?

2 缓存击穿

如何解决

3. 缓存雪崩

如何解决?


1. 缓存穿透

缓存穿透:一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力,或导致数据库异常。这就叫做缓存穿透。

如何避免?

  • 缓存空值

之所以会发生穿透,就是因为缓存中没有存储这些空数据的key。从而导致每次查询都到数据库去了。那么就可以为这些key对应的值设置为null,设置短一点的过期时间,然后存到缓存里面去。后面再出现查询这个key 的请求的时候,直接返回null 。

  • 使用过滤器(布隆过滤器)

布隆过滤器对查询的key进行过滤,过滤掉不存在的key。bloomfilter就类似于一个hash set,用于快速判某个元素是否存在于集合中,其典型的应用场景就是快速判断一个key是否存在于某容器,不存在就直接返回。

该方案可以加在第一种方案中,在缓存之前在加一层 BloomFilter ,在查询的时候先去 BloomFilter 去查询 key 是否存在,如果不存在就直接返回,存在再走查缓存 -> 查 DB。

如何选择?

  • 缓存空值方案:适合使用的key重复率比较高,key数量不是特别多的攻击;
  • 过滤器方案:适合key异常多、请求重复率比较低的数据,没有必要进行缓存,使用过滤器直接过滤掉。

 

2 缓存击穿

在平常高并发的系统中,大量的请求同时查询一个 key 时,此时这个key正好失效了,就会导致大量的请求都打到数据库上面去。这种现象我们称为缓存击穿。

缓存击穿会造成某一时刻数据库请求量过大,压力剧增。

如何解决

使用互斥锁排队:上面的现象是多个线程同时去查询数据库的这条数据,那么可以在第一个查询数据的请求上使用一个互斥锁来锁住它。其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就直接走缓存。

 

3. 缓存雪崩

当某一时刻发生大规模的缓存失效的情况,比如你的缓存服务宕机了,会有大量的请求进来直接打到DB上面。结果就是DB 称不住,挂掉。

如何解决?

  • 事前:保证Redis高可用(可使用集群缓存)

这种方案就是在发生雪崩前对缓存集群实现高可用,如果是使用 Redis,可以使用 主从+哨兵 ,Redis Cluster 来避免 Redis 全盘崩溃的情况。

  • 事中:ehcache本地缓存 + Hystrix限流&降级,避免MySQL被打死

ehcache本地缓存:直接在jvm虚拟机中缓存,速度快,效率高;使用ehcache+redis缓存后,用户发送来一个请求后,先查ehcache本地缓存,如果没有再查redis缓存。如果ehcahe和redis缓存都没有,再查数据库;

Hystrix限流&降级:

限流组件:可以设置组件能够接收的请求阈值;比如一秒来了5000个请求,我们可以设置假设只能有一秒 2000个请求能通过这个组件,那么其他剩余的 3000 请求就会走限流逻辑。调用降级组件处理被限流的请求。

降级组件:需要自己开发降级组件(降级),比如设置的一些默认值呀之类的。以此来保护最后的 MySQL 不会被大量的请求给打死。

  • 事后:redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。

参考:https://juejin.im/post/5c9a67ac6fb9a070cb24bf34、https://juejin.im/post/5b99d4bce51d450e7a24b66e、https://juejin.im/post/5b961172f265da0ab7198f4d

Redis-缓存穿透、缓存雪崩、缓存击穿详解 redis有关缓存穿透、缓存雪崩、缓存击穿的详解 阅读详情

相关推荐

科研软件|Adobe Photoshop 2024 (PS 2024)

科研软件|Adobe Photoshop 2024 (PS 2024)

m0_55499682的博客 5515

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

缓存穿透缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。缓存雪崩是因为大量的key同时过期所导致的问题,而缓存击穿则是部分key过期导致的严重后果。为什么大量key过期会产生问题而少量的key也会有问题?缓存击穿问题也叫热点Key问题,就是⼀个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。具体情况如下图所示:上述:假设此时该热点key的TTL时间到(失效了),则查询缓存未命中,会继续。

qq_53464269的博客 2万+

过压保护电路(OVP)

作者:AirCity 2020.2.4 Aircity007@sina.com 本文所有权归作者Aircity所有 1 示例一 当VBUS=5V时,各点电压电流如图所示,Q1接近截止,输出信号是5V。 当VBUS=5.4V开始,输出信号开始下降,直到VBUS=6.1V,输出信号降低为0.6V。 下面是实测波形,这个电路,输出信号的电压不会超过5.4V,这个输出信号可用于电源的控制信号。 2 ...

AirCity123的博客 3万+

【redis-03】redis缓存穿透、缓存击穿、缓存雪崩

深入理解redis的缓存击穿、缓存穿透和缓存雪崩

zhenghuishengq的博客 2073

双有源桥变换器(DAB)TPS控制:从理论建模到Simulink/PSIM仿真实践

本文深入探讨了双有源桥变换器(DAB)的三重移相(TPS)控制技术,从理论建模到仿真实现。文章详细分析了TPS相比SPS和DPS的优势,阐述了其12种工况的划分逻辑与电流应力最优调制策略,并提供了在Simulink和PSIM平台搭建仿真模型的详细步骤与实战经验,帮助工程师掌握这一高效控制方法。

white的博客 584

ADS 使用教程(十八)Encrypting Designs using RFIP Encoder in ADS

在这一节,我们使用RFIP Encoder进行设计加密,这是一种保护知识产权和敏感设计数据的重要方法。RFIP Encoder提供了一种安全的方式来加密设计文件,确保只有授权人员能够访问和使用这些文件。

Dirge19的博客 1169

Redis 缓存穿透、击穿、雪崩现象及解决方案

前言 如何有效的理解并且区分 Reids 穿透、击穿和雪崩 缓存穿透 关键词:穿过 Redis 和数据库 当 Redis 和数据库中都没有我们想要的数据时,就需要考虑缓存穿透的问题了。下面这段逻辑大家用的会比较多:先去 Redis 中查找某资源,Redis 中查不到就去 DB 中查,DB 中查到后回写一份数据到 Redis 中。 这段逻辑正常情况下问题并不大,但是如果用户恶意重复请求资源 X,该资源在 Redis 和 DB 中都不存在。那么每次请求都会直接打到 DB 上,甚至导致物理 DB 宕机。 解决方

Java流浪记 1万+

ESP32-S3射频测试与全球认证全栈实践指南

功率谱密度(PSD)和发射功率等级是无线通信设备射频合规的核心基础概念,其物理层原理直接决定自适应测试、阻塞容限及多国认证的通过路径。PSD ≥10 dBm/MHz触发强制性自适应测试,需验证LBT机制与跳频鲁棒性;而16级可编程发射功率等级(-24 dBm至+20 dBm)则为功耗、覆盖与法规平衡提供工程调控维度。该能力广泛应用于低功耗蓝牙IoT终端、智能家居网关及工业无线传感器等场景,尤其在ESP32-S3平台中,需结合eFuse校准、Sigma工具链与QuickTrack认证策略实现从实验室调试到量产

weixin_34945060的博客 289

Redis——缓存穿透、击穿、雪崩

缓存击穿是指在缓存系统中,某个被大量访问的热点数据在缓存中的有效期刚好到期,而此时大量并发请求同时过来访问该数据,由于缓存中已无此数据,这些请求就会同时绕过缓存直接去访问数据库,从而导致数据库瞬间承受巨大的查询压力,可能会影响数据库甚至整个系统的正常运行。缓存在同一时间大面积的失效,后面的请求都直接落到了数据库上,造成数据库短时间内承受大量请求。这就好比雪崩一样,摧枯拉朽之势,数据库的压力可想而知,可能直接就被这么多请求弄宕机了。举个例子:系统的缓存模块出了问题比如宕机导致不可用。

xxxmine的博客 2074

关于 ABAP OPEN SQL 的动态 WHERE 条件和 Dynamic Selections

ABAP动态查询技术解析 本文介绍了ABAP中实现灵活数据库查询的动态选择技术,通过FREE_SELECTIONS函数组实现用户自定义查询条件。核心内容包括: 传统固定WHERE条件的局限性,无法满足业务多变需求 Dynamic Selections机制的工作原理,使用FREE_SELECTIONS_INIT初始化、FREE_SELECTIONS_DIALOG交互 完整Demo程序演示如何构建通用表数据浏览器: 用户输入表名后校验权限 调用动态选择函数生成条件 动态拼接WHERE子句执行查询 使用CL_SA

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 676

【YOLOv11工业级实战】15. YOLOv11海洋监测实战:珊瑚礁健康评估(水下图像增强|机器人搭载)

摘要:本文针对珊瑚礁健康评估的海洋监测需求,基于YOLOv11提出解决方案,聚焦水下色偏、悬浮物干扰、珊瑚形态复杂三大难题。引用全球珊瑚礁监测网络(GCRMN)标准,采用CoralNet数据集,通过Jaffe-McGlamery物理模型引导增强与悬浮物去除算法,在浑浊水域(能见度<5m)实现87.3%的健康珊瑚识别率,藻类误判率低至7.2%。介绍了以BlueROV2水下机器人和Jetson AGX Orin为核心的部署方案,结合水下SLAM定位技术,实现珊瑚健康的实时评估与三维覆盖率计算。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1644

Redis的缓存穿透、缓存击穿、缓存雪崩

缓存击穿和缓存雪崩都是与缓存相关的常见问题,它们有一些共同点,并可以采用类似的解决方法。

qq_48595067的博客 7097

【局部规划模块曲线算法】曲线平滑介绍

本文先对轨迹平滑问题做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容(1)适合给移动机器人运动的路径【满足运动学,高阶平滑】(2)高阶的运动学不能够突变的【至少三阶的加速度不能突变,最好四阶的jerk和五阶的snap也不能突变】(3)在转弯的地方不会停下来(4)加减速均衡,节省能量(5)节省时间的。

qq_35635374的博客 5716

详解Redis缓存击穿、穿透、雪崩

缓存穿透:缓存穿透是指当查询的数据在缓存中不存在时,大量的请求会直接访问数据库,导致数据库压力增大。网友回答:简述:查询一个一定不存在的数据,由于缓存不命中,每次都会去查询数据库,导致缓存失去意义,一般是被攻击时详解:缓存穿透指在高并发场景下,如果某一个 key 被高并发访问,没有被命中,出于对容错性考虑,会尝试去从后端数据库中获取,从而导致了大量请求到达数据库,而当该 key 对应的数据库本身value就是空的情况下,这就导致数据库中并发的去执行了很多不必要的查询操作,从而导致巨大冲击和压力。

m0_64422133的博客 1103

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Redis | Redis缓存穿透、缓存击穿、缓存雪崩问题及解决方案

目录 缓存问题 1. 缓存穿透---查不到 解决方案 2. 缓存击穿---量太大,缓存过期 解决方案 3. 缓存雪崩 解决方案 缓存问题 1. 缓存穿透---查不到 缓存穿透是指用户想查询一个数据,发现Redis中没有,也就是缓存没有命中,就向持久性数据库发起查询,发现数据库也没有这个数据,于是查询失败了。当用户请求很多的情况下,缓存没有命中,数据库也没有数据,会给数据库造成很大的压力,这就是缓存穿透。 解决方案 第一种解决方案:使用布隆过滤器 使用布隆过滤器之后,将存储

quwenjing_blog 6321

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Redis的缓存穿透、缓存雪崩、缓存击穿问题及有效解决方案

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。也就是有请求一请求到后端就一定会打到数据库(redis和MySQL都没有该数据),打一次不要紧,但要是有无数个请求同时打过来,那数据库大概率会崩溃,所以预防缓存穿透问题还是十分重要的。缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。

csdn3043663729的博客 3417

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

比如说,在11点的时候大家都去饿了么点外卖,这个时候饿了么的Redis中就存了一大批商家的信息,并且饿了么的程序员给这个缓存设置的过期时间是6个小时。,因为不同的元素hash后的值可能是一样的,例如我们查询java,java经过hash计算出来的索引值和python的一模一样,那么就会认为java也在布隆过滤器中。如果他的查询数据是合法的,但是确实Redis和MySql中都没有,那么我们就在Redis中储存一个空对象,这样下次客户端继续查询的时候就能在Redis中返回了。但是架不住有一些突发的情况。...

m0_67401660的博客 5500

【Redis】缓存击穿、缓存穿透、缓存雪崩原理以及多种解决方案

缓存击穿、缓存穿透、缓存雪崩原理以及解决方案

秋玄的博客 4942

什么是Redis缓存雪崩、穿透、击穿

redis缓存雪崩、缓存击穿、缓存穿透详解

m0_62909831的博客 1531

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

缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。

jiaking_two的博客 1868

Redis发生的缓存穿透,缓存雪崩,缓存击穿详解

什么是缓存:举个例子:越野车,山地自行车,都拥有"避震器",车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的,像个弹簧一样;同样,实际开发中,系统也需要"避震器",防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪;Cache),就是数据交换的,俗称的缓存就是由于其被修饰,所以随着类的加载而被加载到,作为本地缓存,由于其又被修饰,所以其引用(例3:map)和对象(例3:new HashMap())之间的关系是固定的,不能改变,因此不用担心赋值(=)导致缓存失效;

2301_81012448的博客 908

Redis缓存穿透和缓存雪崩以及解决方法

Redis缓存穿透以及解决方法 一、缓存穿透 1.当用户查询的key在redis中不存在,对应的id在数据库也不存在,此时被非法用户进行攻击,大量的请求会直接打在db上,造成宕机,从而影响整个系统,这种现象称之为缓存穿透。 2.解决方案一:把空的数据也缓存起来,比如空字符串,空对象,空数组或list,代码如下 if (list != null && list.size() > 0) { redisOperator.set("subCat:" + root

weixin_45445879的博客 2万+

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

缓存穿透,缓存击穿,缓存雪崩

weixin_42127508的博客 1万+

关于redis缓存击穿、缓存穿透、缓存雪崩及其解决方案

缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中的,请求每次都会穿透缓存直接查询数据库,这样就可能导致数据库压力过大。例如,攻击者恶意构造大量不存在的查询请求,就会对数据库造成严重的负载冲击。缓存雪崩是指在某一时刻,大量的缓存 key 同时过期,或者缓存服务器出现故障,导致大量的请求直接访问数据库,从而使数据库压力骤增,甚至可能导致数据库崩溃。

qq_65709394的博客 2750

redis缓存雪崩、击穿、穿透

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、redis缓存雪崩二、redis缓存击穿三、redis缓存穿透 前言 主要是介绍一下redis缓存雪崩、击穿、穿透,以及他们的解决方式。 一、redis缓存雪崩 所谓的redis缓存雪崩指的是:redis中大量key集中过期或者redis服务器宕机,从而导致大量请求从数据库获取数据,导致数据库服务器访问压力过大。 解决方式: ① 若是由于大量key过期所造成的,可以给key的ttl设置一个过期时间 ② 若是因为redis.

weixin_45414913的博客 8629

Redis系列:缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级

今天给大家整理一篇关于Redis经常被问到的问题:缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等概念 一、缓存雪崩 缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个...

Onechengxuyuan的博客 2616
上一篇: Redis---架构模式
下一篇: Spring---Bean的作用域和生命周期
zhangpower1993
博客等级 码龄11年 100粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值