Redis缓存的三大问题以及处理方案

Redis缓存穿透,缓存击穿,缓存雪崩原因+解决方案 REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案 缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。 缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。 缓存雪崩:当缓存服务器重启或者大量缓存集 阅读详情

        我们日常开发过程中,或多或少都是使用到缓存,通过缓存来实现提升接口响应速度。其中使用Redis作为缓存组件是最常见的技术选型,使用Redis优势很多,但是其存在过程中常见三大问题:缓存穿透,缓存击穿,缓存雪崩,我们也需要有所掌握,并且需要知道怎么解决。

1. 缓存穿透

        缓存穿透是指前端请求到达后端服务器后,先从Redis缓存中查询,没有查询到结果,然后查询数据库,数据库查询不到数据则不进行数据缓存。流程图示如下

 

这种在代码逻辑上会先查询Redis,再查数据库。逻辑上Redis有一层缓存,但是实际情况却是Redis并未起到缓存的真是作用,使得请求全部进入数据库查询,数据库也没有查询到数据,数据库没有查询到数据之后也没有进行空对象写入缓存。这种情况,称之为缓存穿透!在低并发情况下,数据库可以承受住压力的话。存在缓存穿透对系统影响不大,但是在高并发的场景下,大量请求对数据库会造成很大的压力,极有可能直接数据库宕机影响系统的使用,这种是需要极力避免的。处理办法有常见的两种,数据库查询后缓存和布隆过滤器

1.1 数据库查询后缓存

        数据库查询后缓存是指,请求先通过Redis查询,没有查询到数据,然后请求查询数据库,将数据库查询结果进行Redis缓存,然后响应前端请求。这种是数据库数据存在数据的场景,一次查询后缓存,后续相同数据查询就会走Redis。另外一种是数据库也不存在对应的数据,这时,数据库为查询到数据,也将null缓存到Redis中。这样后续的请求也是会走到Redis中。但是这种方式存在很大的弊端,请求第一次还是会进入数据库,在高并发的情况下,数据库压力其实也很大。一般不采用这种方式处理。这种请求的图示如下

 1.2 使用布隆过滤器

        布隆过滤器的相关知识,就不在这里说明了,可以参考一下我关于布隆过滤器的理解的文章。布隆过滤器文章。根绝布隆过滤器的特点,如果布隆过滤器判定没有,就一定没有,可以帮助服务端过滤非法数据的请求,即Redis没有相关,数据库也没有相关数据的请求。布隆过滤器的作用效果图示如下:

 在使用布隆过滤器的时候,有个前置条件,就是需要将校验数据提前在布隆过滤器中进行存储。当布隆过滤器判断请求的数据不存在时,直接返回响应,避免对数据库造成很大的压力。以上是处理缓存穿透的两种常见的处理方案。

2. 缓存击穿

        系统中都存在某个或许某些热点数据,访问量特别大,当大量请求进入服务器后,遇上缓存失效,缓存不存在导致大量的直接访问数据库,给数据库造成过大的压力,称为缓存击穿。处理换缓存击穿常见的处理有两种方案。合理的设置热点数据过期时间和加锁访问。

2.1 合理设置热点数据过期时间

        热点数据在缓存的时候,根据实际的业务常见,估算充裕的缓存的失效时间,例如某个活动的投放时间是10个小时,这10个小时候的访问量肯定较大。但是10个小时候,就可以保证并发量一定会出现大幅下降吗?我个人觉得不一定。所以我们在设置这个热点key的过期时间是,可以设置20小时,甚至24小时。这样会更加的保险。具体的时间还得根据具体的场景设置。

2.2 加锁访问

        热点数据设置合理的过期时间,是一个有效方案,但是这个方案对系统压力还是很大。此时为了保护系统的稳定性,还需要有其他的手段来处理,加锁访问就是一种比较有效的手段。加锁的方式有很多种,如果是单节点,Java自带的synchronized就可以实现,但实际情况往往不大可能。现在都是集群部分来保证服务的高可用性。所以在加锁时,需要使用分布式锁。可以使用比较常用,例如:redisson等。

以上是个人总结的为了防止缓存击穿,导致数据库压力过大,影响系统的稳定性的处理方案!

3. 缓存雪崩

        缓存雪崩,字面意思也比较好理解,就是缓存的数据出现雪崩。大面积的缓存数据或者所有的缓存数据都失效,所有的请求全部进入数据库查询的情况。缓存雪崩实际上不大可能是程序问题,更大的概率是由于其他因素导致,例如服务器断电等等。处理缓存雪崩,我个人认为更多的是得从运维的角度来处理,比如服务器集群部署,服务器多区域部署。另外还可以通过服务降级,服务限流等方面入手处理。

以上就是个人针对使用Redis缓存时,会遇到的三大问题的分析与常见的处理方案了,如有其他更加优秀的处理方案,欢迎讨论!!!

奥比中光Dabai深度相机SDK在Ubuntu22.04的兼容性安装指南 本文详细指导如何在Ubuntu22.04系统上安装奥比中光Dabai深度相机的SDK。针对新旧版本不兼容的核心问题,重点推荐使用经过验证的v1.10.18版本SDK,并提供了从系统依赖检查、SDK下载安装、Python环境配置到编译测试的完整步骤,帮助用户成功解决安装难题并实现相机驱动。 阅读详情

相关推荐

QCC308X/518X/309X加LDAC解码

QCC308X/518X/309X加LDAC解码。

Alex_886的博客 6606

Redis缓存三大问题

Redis缓存三大问题,缓存穿透,缓存击穿,缓存雪崩

weixin_44183721的博客 2266

服务器测试之intel E8102CQDA2

网卡性能 iperf E810

qq_41897488的博客 2504

Redis的高并发场景解决方案

1)单线程容易实现。(2)效率高轻松处理每秒几十万数据(因为是占内存的所以CPU不是瓶颈)。(3)支持数据类型多(String,List,hash,set,zSet)。使用NoSQL从数据库中读取数据进行缓存,就可以从内存中读取数据了,而不像数据库一样读磁盘。现实是读操作远比写操作要多得多,所以缓存很多常用的数据,提高其命中率有助于整体性能的提高,并且能减缓数据库的压力,对互联网系统架构是十分有利的。...

weixin_61901664的博客 3948

cesium自定义指南针

项目需要一个指南针,用鼠标按住旋转指针,会让3d地图旋转,点击中心点重置方位。当然可以使用插件cesium-navigation-es6,但是样式不好修改,所以我自定义了一个指南针。

weixin_47017648的博客 750

BMS应用软件开发 — 7 从特斯拉到问界:主流BMS硬件架构深度解析

本文深度解析了从特斯拉Model 3到问界M5的主流BMS硬件架构,探讨了BMS在电动汽车中的核心价值与应用软件开发的关键技术。通过对比分析两家厂商的硬件设计哲学、芯片选型策略及成本控制方法,揭示了BMS硬件系统如何影响电池性能与整车安全。文章特别分享了电压采样精度、EMC设计等实战经验,为BMS开发提供宝贵参考。

weixin_42554408的博客 455

探索--------------redis缓存三大问题及解决方案

key 对应的数据存在,但在 redis 中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端数据库加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端数据库压垮。key 对应的数据存在,但在 redis 中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端数据库加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端数据库压垮。当业务系统发起查询时,按照上述流程,首先会前往缓存中查询,由于缓存中不存在,然后再前往数据库中查询。

zzzxxx520369的博客 1786

信创那些事儿——Spring Boot中集成东方通中间件(TongWeb)

在Spring Boot中集成东方通中间件(如TongWeb作为Servlet容器)通常涉及几个步骤,但需要注意的是,TongWeb本身是一个独立的Java EE应用服务器,而不是像Tomcat那样可以直接嵌入到Spring Boot应用中的中间件。因此,集成通常意味着将Spring Boot应用打包为WAR文件并部署到TongWeb服务器上。

来北欧写代码 6489

Redis三大问题

缓存穿透:(数据不存在) 缓存和数据库都没有的数据,每次查询都到数据库去查,造成数据库性能浪费。 (加入缓存记得要添加过期时间) 解决: 缓存空对象 (实现简单,效果不好) 布隆过滤器 (实现复杂,效果好) 1.缓存空对象实现: 一.空对象: 没查到加入空对象到缓存中 效果: 不好,第一次访问还是会去查询数据库,更换了id去查的话也还是会去查询数据库,只能解决一个key多次访问的问题,多个key就不行。其次还会导致redis存在大量的空数据,浪费空间。 二.布隆过滤器: 应用: 导入依赖:(谷歌的)

weixin_43823756的博客 868

大数据预测分析:精准把握市场趋势

传统市场预测多依赖经验判断(比如“去年卖了1000件,今年加20%”)或小数据统计(比如用近6个月的销量做线性回归)。而大数据预测分析是:利用海量结构化+非结构化数据(销售、用户、社交媒体、天气等),通过机器学习/深度学习模型,挖掘数据中的关联关系与趋势规律,实现对未来市场走势的精准预测。更全面:覆盖内部(企业数据)+外部(行业、环境数据)的全维度数据;更精准:用算法替代人工,避免主观偏差;更实时:支持分钟级/小时级的实时预测(比如直播带货的销量预测)。错误做法。

AI智能探索者的博客 1024

32、高光谱遥感技术在军事领域的应用解析

高光谱遥感技术凭借其高分辨率和精细光谱分析能力,在军事领域广泛应用于战场详细侦察、伪装目标识别及目标实际温度与发射率的检测,显著提升了目标识别精度和作战支持能力。同时,该技术在内陆水体成分反演、海洋环境监测和农业管理等领域也展现出巨大潜力。尽管面临数据量大、处理复杂、技术融合不足和仪器性能限制等挑战,未来通过人工智能融合、高效算法研发和先进仪器开发,高光谱遥感技术将在多领域实现更深入应用与发展。

blue的专栏 229

一次性解释清楚redis缓存三大问题

通常面试或者学习redis涉及到的redis缓存三大问题为缓存击穿、缓存穿透以及缓存雪崩。下面就逐一讲解什么是缓存击、穿透以及雪崩,附上它们常见的解决方法。

2301_82014959的博客 2234

【ARMv9 DSU-120 系列 1 -- DSU-120 DynamIQ 概述】

ARMv9架构中的DynamIQ™ Shared Unit-120(简称DSU-120)为一组基于Cortex-A类架构的核心提供了共享的L3内存系统、窥探控制(snoop control)和 过滤(filtering) 以及其他支持集群运作的控制逻辑。这个集群被称为DSU-120 DynamIQ™集群。此外,所有连接到片上系统(SoC)的外部接口也都是通过DSU-120提供的。一个DSU-120 DynamIQ™集群可以包含1到14个核心,且同一集群中可包含多达三种不同类型的核心。

CodingCos的博客 1185

三大问题,Redis缓存异常及处理方案总结

Redis作为一个高性能的内存中的key-value数据结构存储系统,在我们日常开发中广泛应用于缓存、计数器、消息队列、排行榜等场景中,尤其是作为最常用的缓存方式,在提高数据查询效率、保护数据库等方面起到了不可磨灭的作用,但实际应用中,可能会出现一些Redis缓存异常的情况,本文主要对Redis缓存异常及处理方案进行了总结。1. 背景Redis是一个完全开源的、遵守BSD协议的、高性能的key-value数据结构存储系统,它支持数据的持久化,可以将内存中的数据保存在磁盘中,而且不仅仅支持简单的key-val

JavaMonsterr的博客 411

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

大家在学习Redis中不仅要学习到Redis的五大基本类型,会运用get\set进行获取和存储值,更多的是再学习时要知道为什么要使用Redis以及使用Redis的好处。相信大家在看到这篇文章时已经对Redis有了一定的理解和使用。我们都知道Redis缓存是用来减少数据库的压力,提高性能的内存存储的数据结构服务器。 说白了就是当用户在发送请求数据库时,首先会经过Redis缓存,Redis先进行查询用户想要的数据(Redis读写速度比数据库中读写要快很多),如果Redis缓存中有用户想要请求的数据的话就不需要去

心态的博客 2735

pscad IEEE标准系统搭建说明

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

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

文章目录一、缓存穿透二、缓存雪崩三、缓存击穿 一、缓存穿透 什么是缓存穿透呢?就是当客户端发起请求到后台,后台去查询数据的过程中先去查询redis缓存,如果redis缓存中没有, 再去查询数据库, 然后数据库返回数据, 并且把数据存储到redis中, 这样当下次请求过来时,就可以直接查询redis缓存了并返回给客户端,不必再去查询mysql,缓解了数据库压力,并提高了效率。当然,这是我们理想程序正常的情况,但是有没有想过一个问题,如果说是有人恶意攻击,客户端发起的请求中的数据不仅在redis缓存没有,而

qq_43811527的博客 302

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Redis:缓存雪崩、穿透、击穿的技术解析和实战方案

本文针对Redis在高并发环境中常见的三大问题——缓存雪崩、穿透、击穿,提供了系统性的解决方案。缓存雪崩建议采用随机TTL、多级缓存和限流策略;缓存穿透推荐使用空值缓存、布隆过滤器和参数校验;缓存击穿可通过互斥锁、热点永不过期和异步更新应对。文章强调组合使用本地缓存、远程缓存和异步回源机制,并配合限流熔断保障系统稳定性。每种问题都给出了具体代码示例,为构建健壮的缓存系统提供了实用指导。

木头 1526

【缓存】一、Redis的基本使用与Redisson分布式锁

Redisson通过看门狗机制和LUA脚本保证了对Redis的操作是一个原子操作,以及我们系统中断时也能保证锁的释放,同时也能保证自己的锁不会去解别人的锁,这就避免了死锁问题的出现锁的粒度问题:这样的每一条数据一把锁,这样可以保证我们一个业务只会影响自己的业务,不会影响到其他内容,否则就可能出现 A 请求被 B 阻塞的问题,就很抽象// 使用try-finally块来保证锁的释放try {

weixin_41365204的博客 522

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

什么是缓存雪崩、击穿、穿透? 当大量的用户请求请求同时访问数据库的话,数据库很容易崩溃。

机械工程跑路哥 1066

浅谈Redis缓存处理,在项目中如何实现

缓存击穿是指当缓存中某个热点数据过期了,在该热点数据重新载入缓存之前,有大量的查询请求穿过缓存,直接查询数据库。第一种方法比较好理解,就是当数据库中查不到数据的时候,我缓存一个空对象,然后给这个空对象的缓存设置一个过期时间,这样下次再查询该数据的时候,就可以直接从缓存中拿到,从而达到了减小数据库压力的目的。缓存雪崩是指当缓存中有大量的key在同一时刻过期,或者Redis直接宕机了,导致大量的查询请求全部到达数据库,造成数据库查询压力骤增,甚至直接挂掉。第二种方案是使用布隆过滤器,这也是比较推荐的方法。

m0_47281737的博客 134

c#中如何解决Redis的缓存穿透、缓存击穿、缓存雪崩?

Redis缓存穿透、缓存击穿、缓存雪崩是常见的缓存问题,可以通过以下方式解决:缓存穿透缓存穿透是指查询一个不存在的数据,由于缓存中没有,导致每次请求都会查询数据库,增加数据库负载。解决方法如下:布隆过滤器:将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。缓存空对象:当一个查询返回的数据为空时,应该将这个空对象...

dotNET跨平台 349

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

在之前的redis的的文章中,我们说过redis的主从复制,现在我们来说一说redis经常发生的集中问题 1,缓存穿透,是指一个缓存中没有的数据同时数据库中也没有,这样就会导致缓存没有命中,因为数据库中也没有这项数据,所以在请求之后也不会在写入缓存中,这样就会导致直接访问数据源,导致压垮数据源 2,缓存击穿,是指key对应的数据是存在的,但是在缓存中过期了。这时有高并发的大量数据请求过来,就会因为缓存中没有而导致直接去访问数据源,访问之后还需要将数据回写到数据源中,这是会容易把数据源压垮 3,缓存雪崩

weixin_44758537的博客 709

redis的数据击穿,数据穿透,缓存雪崩问题

文章目录1.redis的缓存穿透 1.redis的缓存穿透 redis缓存穿:正常情况下是不能存在缓存穿透的问题,但是请求的redis值可以为空值,如果查询的数据redis中没有,就会查询对应的MySQL数据库,如果用户写一个多线程任务,每次都从redis中查询对应的,键为空的值,这样就会存在,高并发情况下,直接导致对应的mysql宕机。 redis缓存穿透的解决方案: 在对应的数据返回给用户的时候,在redis中以搜索条件为key,对应的值赋值为空,这样可以解决对应的值为空,的缓存穿透问题,但是对应的ke

qq_41125149的博客 508

Redis(二)缓存相关

Redis缓存基础知识

onoeono的博客 309

Redis缓存穿透,缓存击穿,缓存雪崩解决方案以及封装Redis工具类

参考自黑马程序员 缓存穿透 缓存穿透: 数据在数据库和redis中都不存在,请求直接打在数据库中。 解决方案: 方案一: 方案二: 代码案例实现: // 缓存穿透 private Shop cacheBreakDown(Long id){ // 查询redis String jsonShop = (String) redisTemplate.opsForValue().get(RedisConstants.SHOP_CACHE + id); .

weixin_44991304的博客 1021

浅谈Redis缓存常见的三种问题 | 门户平台实战解析

本文探讨了Redis在门户平台中的常见问题及解决方案。主要分析了三种典型问题:缓存穿透(恶意请求不存在的键)、缓存击穿(热点数据失效导致高并发访问数据库)和缓存雪崩(大量缓存同时失效)。针对这些问题,文章提出了相应解决方案:缓存空值、布隆过滤器、互斥锁、差异化过期时间等。最后给出了最佳实践建议,包括监控预警、容量规划等。通过合理使用这些方案,可以有效提升系统性能和稳定性。

m1024292777的博客 504
上一篇: 布隆过滤器的原理与实现
下一篇: Redis常用命令之Set类型
~小爷.
博客等级 码龄9年 26粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值