来说说reids的缓存穿透、缓存击穿、缓存雪崩都是什么?怎么解决?

VisualSFM+MeshLab 三维重建全过程记录 VisualSFM+MeshLab 三维重建全过程记录,从下载到运行出结果,以及其中一些可能出现的小问题。通过这两个软件熟悉一下多目立体视觉重建的流程。 阅读详情

缓存穿透

面试的时候就被问到了这个问题,具体描述就是,正常的请求都是先请求到缓存(就当我们的缓存是Redis吧),如果缓存中存在数据,就直接返回,如果缓存中不存在请求的数据,就查询数据库,然后将查询到的数据再放到缓存中。

那么如果现在有一堆的请求,在缓存中没有,数据库中也没有,怎么办?这种垃圾请求还特别多,而且因为是在数据库没有查询到,所以也不会被放到缓存中,这就是缓存穿透的场景。

大量的这种请求,最终会导致数据库压力剧增,最终就会将数据打垮,若是这个数据库是核心数据库,那么其他所有依赖这个库的接口都会报错。
在这里插入图片描述
例如,每次请求的参数都是id,而id是我们数据库里的自增主键,但是请求过来的参数要么是-1这种,要么就是特别大的一个数,反正就是不存在的数据。

解决缓存穿透

那么如何解决缓存穿透呢?

  • 首先最基本的就是要做参数校验,非法的参数就直接return,连缓存层都到不了。
  • 当请求的数据在穿过Redis后,数据库也返回空,这样的数据也可以存入到缓存中,然后过期时间可以设置一个比较短的时间,这样能够在一定程度上保障后端数据库的安全。
  • 可以使用Redis的布隆过滤器,这个工具可以有效的防止缓存穿透的发生,我们可以将一个参数是否存在保存为一个boolean值,然后需要一个bit就可以存储,这样的数据压缩到一个数据结构中,就是布隆过滤器的原理。即节省存储空间,又能达到效果。

缓存击穿

我们在Redis存储的数据,主要是缓存的效果,目的是为了解决DB的压力,所以一些热点数据,都是先从缓存中获取的,当缓存中不存在的时候再从DB中获取然后再存入缓存。

但是如果一个高频的热点数据,在失效的一瞬间,它的大量请求就会直接打到DB上,这样在DB还没有返回数据给Redis的时候,DB承受了热点请求的压力,就好像缓存是一个水桶,然后突然水桶破了一个洞,直接冲垮了后面的堤坝(DB)。

在这里插入图片描述

解决缓存击穿

造成缓存击穿的原因是,在同一时刻从数据库中获取了大量数据,并且设置了相同的过期时间,这些缓存就会在同一时刻失效,这样就造成了缓存击穿的问题。
解决方案

  • 一些热点的数据,我们可以设置永不过期;或者是在访问数据的时候延长过期时间。
  • 也可以用分布式锁,来锁住数据,保证同一时间只有一个线程能够获取数据,其他请求获取不到数据,只能等待,但是在高并发的场景下,这种方案,体验不太好,并且分布式锁的压力也会特别大。

缓存雪崩

Redis中存储了很多的数据,但是有时候这些数据会出现,在同一个时刻批量过期的情况,因为有可能这些数据是批量插入的,所以他们的过期时间就会都在同一个时间。

正好在这个批量数据过期的时间点,大量的请求过来了,因为缓存数据过期了,所以没有命中缓存,直接请求到了数据库中。数据库的压力突然剧增,甚至有可能直接撑不住挂掉。然后有可能DBA会紧急重启DB,但是刚一恢复,新的请求立马又把DB打垮了。

也有可能就是Redis挂了,缓存都不能用了,请求也是直接打到了DB上,然后DB也是扛不住压力,直接挂掉。再恢复,再挂掉。
在这里插入图片描述
Redis中同一时刻大量的Key过期,那一瞬间和Redis不存在一样,还有Redis真的挂了的情况,这对服务和DB来说是灾难性的问题。

解决缓存雪崩

解决方案

  • 批量存入缓存的数据,我们可以为这些数据分别配置比较合理的过期时间,即使是随机分配过期时间也可以,避免同一时间失效。
  • 热点数据永不过期,更新操作时直接更新缓存,但是并不设置过期时间。
  • 当数据库缓存出问题时,可以采用降级措施,虽然是用DB顶上了请求,但是可以通过降级方案,保证某些数据在同一时刻只能有一个线程在查询数据库和写缓存,这样不至于把数据库给搞崩了。
  • 还有就是为了防止Redis挂了,导致的缓存雪崩,可以保证Redis的高可用,就是将Redis集群部署,然后将热点数据都分配到不同的节点上,这样就可以有效的防止雪崩的出现。

关注公众号
在这里插入图片描述

每周会更新干货知识

系统建模语言 (SysML) 系统建模语言 阅读详情

相关推荐

自由曲面与衍射光学元件DOE:从基础理论到工业应用的全景解析

本文全景解析了自由曲面与衍射光学元件的核心理论与工业应用。文章深入探讨了自由曲面在非对称光学设计中的灵活性及其数学描述与制造挑战,并阐述了衍射光学元件通过微纳结构进行波前相位调制的原理与多样化功能。两者与经典光学互补融合,共同构成了高端成像、智能照明、激光加工及AR/VR等前沿领域的底层技术支柱。

devops8pract的博客 390

缓存击穿、缓存穿透、缓存雪崩介绍及解决思路

缓存击穿、缓存穿透、缓存雪崩详解及其解决办法

qq_51133939的博客 469

Aurora 8B/10B IP核介绍 —— Xilinx 技术文档Pg046

一、概述该IP核与用户接口之间支持AXI4-Stream协议,且基于ZYNQ SOC、A7、K7、V7以及UltraScale、UltraScale+系列FPGA的高速收发器(the high-speed serial transceivers)进行实现。多达 16 个连续绑定4 个连续绑定的 GTP 收发器framingstreaming以及全双工或单工加扰消扰CRC校验热插拔Aurora 8B/10B核心(图1-1)是一种可扩展的、轻量级的、用于高速串行通信的链路层协议;

qq_32147275的博客 1637

什么是缓存击穿?如何解决?

1.什么是缓存击穿? 缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂(意味着对数据库压力相对较大)的key突然失效了(可以理解为redis的缓存突然无了),无数的请求访问会在瞬间给数据库带来巨大的冲击。

a8425的博客 1万+

极智嘉嵌入式面试题及参考答案

IIC(Inter-Integrated Circuit)即集成电路总线,是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它仅使用两根线,即串行数据线 SDA 和串行时钟线 SCL,就能实现多个设备之间的通信,具有简单、高效、占用资源少等优点,广泛应用于各种嵌入式系统中。

大模型大数据攻城狮的专栏 917

【GameFramework框架】三、快速启动

这篇文章就带领大家如何快速启动GameFramework框架。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 4422

什么是缓存穿透、缓存击穿、缓存雪崩及其解决方案

什么是缓存穿透、缓存击穿、缓存雪崩及其相应的解决方案

shyの个人笔记 3773

PreScan快速入门到精通第三十九讲基于车道线识别传感器的车道保持辅助算法Demo讲解

车道保持辅助系统使用一个前置的摄像头,一般安装在车内后视镜附近,用来检测车辆前方的车道线,并监测车辆在其车道上的位置。在有电动助力转向EPS的车辆中,它轻轻地,但明显地反转向,以保持车辆在车道上。在简单车辆动力学的Simulink模型中,一个25%的油门开度常数被设定为输入,作为车辆行驶的纵向动力。首先是近似的角度α,它是传感器航向(=车辆航向)与右侧车道车道线的切线的近似角。一个配备了车道线传感器和简单动力学模型的车辆(MAZDA),将在没有任何规定轨迹的情况下跟随道路车道线行驶。3D浏览器中的多视图。

小明师兄的博客 1842

Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级

一、缓存雪崩: 1、什么是缓存雪崩: 如果缓存在某一个时刻出现大规模的key失效,那么就会导致大量的请求打在了数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库宕机。这时候如果运维马上又重启数据库,马上又会有新的流量把数据库打死。这就是缓存雪崩。 2、问题分析: 造成缓存雪崩的关键在于同一时间的大规模的key失效,为什么会出现这个问题,主要有两种可能:第一种是Redis宕机,第二种可能就是采用了相同的过期时间。搞清楚原因之后,那么有什么解决方案呢? 3、解决方案: (1

zhouzhiwengang的专栏 781

移动支付APP(仿支付宝)

Toast.makeText(PayActivity.this, "支付失败:" + payResponse.getMsg(), Toast.LENGTH_SHORT).show();Toast.makeText(PayActivity.this, "支付失败:" + t.getMessage(), Toast.LENGTH_SHORT).show();Toast.makeText(PayActivity.this, "支付失败", Toast.LENGTH_SHORT).show();

寒寒豆豆软件公司的博客 134

2020计算机专业保研夏令营面经:中科院计算所网数机试题目

计算所网络数据科学与技术重点实验室的第一阶段是机试。机试不限程序语言,要求提交源代码。

乔卿的博客 2957

再也不怕,缓存雪崩、缓存击穿、缓存穿透

用户的数据一般都是存储于数据库,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里最慢的硬件了。 当用户的请求,都访问数据库的话,请求数量一上来,数据库很容易就奔溃的了,所以为了避免用户直接访问数据库,会用 Redis 作为缓存层,因为 Redis 是内存数据库,我们可以将数据库的数据缓存在 Redis 里,相当于数据缓存在内存,内存的读写速度比硬盘快好几个数量级,这样大大提高了系统性能。 引入了缓存层,就会有缓存异常的三个问题,分别是缓存雪崩、缓存击穿、缓存穿透。 这三个问题也是面试中很常考察的

小林coding 8283

基于DFT的滤波系列:加窗滤波的 Matlab 实现

在实际应用中,你可以尝试不同类型的窗函数(如汉宁窗、汉明窗等)以及不同的滤波参数来获得所需的滤波效果。此外,还可以进一步了解 DFT 和窗函数的原理,以及其他数字信号处理技术的应用。加窗滤波是一种常用的数字信号处理技术,它通过在频域上应用窗函数来改善信号的频谱特性。我们通过定义输入信号、应用窗函数、进行 DFT 和逆 DFT,实现了滤波过程,并通过绘图进行了可视化。在频域上进行加窗滤波的关键是将窗函数应用于 DFT 的结果。首先,我们需要定义一个输入信号,这里我们使用一个简单的正弦波作为示例。

m0_47037246的博客 462

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

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

Java流浪记 1万+

Camera2Demo

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

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

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

weixin_42127508的博客 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

qq_48595067的博客 7096

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

牛逼,三句话搞懂 Redis 缓存穿透、击穿、雪崩!

前言 如何有效的理解并且区分 Reids 穿透、击穿和雪崩之间的区别,一直以来都挺困扰我的。特别是穿透和击穿,过一段时间就稀里糊涂的分不清了。 为了有效的帮助笔者自己,以及拥有同样烦恼的朋友们区分这三种场景。笔者总结了一些关键词,希望大家可以和我一样通过联想的方式来区分并理解这三种场景的区别! 缓存穿透 关键词:穿过 Redis 和数据库 当 Redis 和数据库中都没有我们想要的数据时,就需要考虑缓存穿透的问题了。下面这段逻辑大家用的会比较多:先去 Redis 中查找某资源,Redis 中查不到

weixin_47531845的博客 3851

Reids 如何处理缓存穿透、缓存击穿、缓存雪崩问题?

Redis 本身是一个高性能的键值存储系统,它提供了一些基础功能,但解决缓存穿透、缓存击穿和缓存雪崩等问题,更多的是依赖于,并结合 Redis 提供的特性来实现。

专注于技术分享 970

Redis中缓存穿透、击穿、雪崩以及解决方案

Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和有序集合(sorted sets)等。

2301_77899321的博客 1965

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

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

qq_42000631的博客 3247

Reids的缓存预热、雪崩、击穿、穿透及企业级解决方案

redis缓存预热是服务器在启动后迅速宕机导致。宕机的主要原因就是服务器在启动时,缓存中没有任何数据,从而大量用户发送请求时,会直接查询数据库这也就是导致服务器宕机的主要原因(数据库处理高并发的性能没有redis性能高)缓存雪崩是指在同一时间内,缓存中大量的数据失效或者过期,导致请求直接进入数据库或都后端,从而导致数据库崩溃、服务器崩溃、redis崩溃缓存击穿也叫热点key问题,就是一个高并发高访问的key忽然失效,大量的请求会给数据库带来巨大的压力,从而导致缓存击穿缓存穿透是指。

2301_78527024的博客 1839

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

Redis缓存穿透、雪崩、击穿怎么理解?如何解决?

zwz1342的博客 904

Redis 缓存三大坑:击穿、穿透、雪崩的解析与解决

缓存击穿是指某个高频访问的"热点 key"(如秒杀活动的商品 ID、热门新闻的 ID),在缓存中过期失效的瞬间,大量并发请求直接穿透缓存,涌向数据库,导致数据库瞬间压力骤增,甚至引发数据库宕机的现象。缓存穿透是指请求访问的 key 在缓存和数据库中均不存在(如恶意构造的非法 ID、已删除的数据 ID),导致所有请求直接穿透缓存,全部涌向数据库,造成数据库压力过大的现象。典型场景示例攻击者批量构造不存在的用户ID(如user_999999)用户查询已下架的商品ID(商品ID在数据库中已被删除)

Toroto5的博客 2007

Redis 缓存问题:穿透、击穿、雪崩是什么及其解决方案

本文主要介绍了Redis缓存中的三种常见问题及解决方案: 缓存穿透:查询不存在的数据导致请求直接打到数据库。解决方案包括缓存空数据和使用布隆过滤器进行预判。 缓存击穿:热点数据失效导致大量并发请求访问数据库。可通过互斥锁保证强一致性,或使用逻辑过期策略提高性能。 缓存雪崩:大量key同时失效或Redis宕机引发数据库压力。需设置不同过期时间或实现高可用架构。 三种问题区别在于:穿透针对不存在数据,击穿针对单个热点数据,雪崩则是大量数据集体失效。解决方案需根据业务场景选择。

qq_49232751的博客 1147

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

一、缓存处理流程 处理Reids缓存引发的问题时,我们首先得知道缓存处理的一个流程,如下图: 二、缓存穿透,缓存击穿和缓存雪崩 缓存穿透 描述:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1024”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。 解决方法: 1.接口层增加校验,如用户鉴权校验,id做基础校验,id<=...

weixin_45381580的博客 2222

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

缓存穿透 :缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。常见的解决方案有两种:缓存空对象优点:实现简单,维护方便缺点:额外的内存消耗可能造成短期的不一致布隆过滤优点:内存占用较少,没有多余key缺点:实现复杂存在误判可能缓存空对象思路分析。

2502_92141759的博客 1309
上一篇: 4 种分布式一致性 Session 实现方式
下一篇: 非常有必要了解的Springboot启动扩展点
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值