我的编程空间,编程开发者的网络收藏夹
学习永远不晚

redis缓存雪崩、缓存击穿和缓存穿透是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

redis缓存雪崩、缓存击穿和缓存穿透是什么

这篇文章主要介绍了redis缓存雪崩、缓存击穿和缓存穿透是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇redis缓存雪崩、缓存击穿和缓存穿透是什么文章都会有所收获,下面我们一起来看看吧。

缓存雪崩

首先来看看缓存雪崩,缓存雪崩的概念就是:大量的请求没有在Redis缓存中得到处理,从而导致请求都涌入到数据库中,然后数据库的压力剧增。

引起缓存雪崩的原因可总结为2个:

  • 缓存中有大量的数据同时过期,这样此时大量的请求都怼到数据库了。

  • Redis缓存实例发生故障了,无法处理大量请求,也会导致请求都跑到数据库去了。

先来看看第一个场景:缓存中大量的数据同时过期问题。

缓存中大量的数据同时过期

结合图例来看,就是大量的数据在同一时间过期,然后此时又有很多的请求要读取这些数据。当然就会发生缓存雪崩,从而导致数据库压力剧增了。

redis缓存雪崩、缓存击穿和缓存穿透是什么

大量数据同时过期的解决方案

应对大量数据同时过期问题,通常有2种方案:

  • 数据过期设置增加随机时间:也就是用expire命令给数据设置过期时间时,增加一个随机的时间,比如数据a是5分钟过期,在5分钟的基础上随机增加10-120秒时间。这样就能避免大量数据同时过期。

  • 服务降级:也就是发生缓存雪崩时,(1)若访问的不是核心数据,当没有缓存命中时,不去数据库了,直接返回预先设置好的信息,比如空值或者错误信息;(2)当访问的是核心数据,缓存未命中时,允许去数据库查询。这样就将不是核心数据的请求都拒绝怼到数据库了。

redis缓存雪崩、缓存击穿和缓存穿透是什么

看完了大量数据同时过期的情况,再来看看Redis缓存实例故障的情况。

Redis缓存实例故障导致的缓存雪崩

这种情况下,Redis无法处理读请求了,请求自然就怼到数据库了。

通常来说,应对这种情况,我们也有2种方式:

  • 在业务系统中做好服务熔断/请求限流

  • 事前预防:构建Redis高可靠集群,比如主从集群的主备切换。

服务熔断,也就是当Redis发生故障时,暂停请求对缓存系统的访问。等到Redis恢复正常了再打开请求访问。

这种方式我们需要对Redis或数据库的运行状态进行监控,比如MySQL的负载压力、Redis的CPU使用率、内存使用率及QPS等。当发现Redis实例缓存雪崩了,就暂停服务。

这种情况能有效放置大量请求对数据库造成压力。但是会暂停请求访问,对业务端的影响很大。

redis缓存雪崩、缓存击穿和缓存穿透是什么

因此,为了减少对业务端的影响,我们可以使用请求限流方式,控制QPS,避免过多的请求怼到数据库去。比如下面图例,本身有2万每秒的请求,但因为Redis故障宕机了。我们限流操作将qps降到2千每秒,数据库处理2000的qps还是没问题的。

redis缓存雪崩、缓存击穿和缓存穿透是什么

缓存击穿

缓存击穿就是指个别访问频繁的热点数据无法缓存命中,然后请求都涌入到数据库中。它经常会在热点数据过期时发生。

redis缓存雪崩、缓存击穿和缓存穿透是什么

对于缓存击穿问题,我们知道这些都是被访问非常频繁的热点数据,处理方式就简单粗暴了,直接不设置过期时间了。等热点数据不频繁访问再手动处理即可。

缓存穿透

缓存雪崩有些特别,它是指要访问的数据既不在Redis缓存,也不在数据库中。当大量请求进到系统时,Redis和数据库都会有巨大压力。

redis缓存雪崩、缓存击穿和缓存穿透是什么

导致缓存穿透的原因通常有2种:

  • 数据被误删除了,导致缓存和数据库都没有数据了。然而客户端是不知道的,还在疯狂请求。

  • 有恶意攻击的情况:也就是被人盯上了,专门去查没有的数据。

对于缓存穿透的情况,解决方案可以参考下面几种:

  • 是对缓存设置空值或者默认值。 比如发生缓存穿透时,在Redis缓存中设置空值/默认值。后续查询该值时就直接返回这个默认值了。

  • 使用布隆过滤器来判断数据是否存在,避免从数据库查询。

  • 在前端就进行请求检测。 比如在前端将一些不合法的请求直接过滤,不要发到后端来处理。

第一点和第三点比较容易理解,这里就不展开描述。我们重点来看看第二点:布隆过滤器。

布隆过滤器

布隆过滤器主要用于判断一个元素是否在一个集合中。它是由一个固定大小的二进制向量(可理解成默认为0的bit数组)和一系列的映射函数组成的。

我们首先来看看布隆过滤器是如何标记一个数据a的:

  • 第一步,会使用到多个映射函数(哈希函数),每个函数都会计算这个数据a的哈希值;

  • 第二步,这些计算得出的哈希值会分别对bit数组长度取模,这样就得到每个哈希值在数组上的位置;

  • 第三步,把第二步得到的位置,分别在bit数组上设置为1。

通过这3个步骤,数据标记就完成了。然后要查询数据在不在的时候是这样做的:

  • 先计算这个数据在bit数组中的多个位置;

  • 然后分别查看bit数组的这些位置的bit值。只有每个位置的bit值都为1,说明数据才可能存在,否则数据一定不存在。

结合下图来看,基本原理就是这样。

redis缓存雪崩、缓存击穿和缓存穿透是什么

关于“redis缓存雪崩、缓存击穿和缓存穿透是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“redis缓存雪崩、缓存击穿和缓存穿透是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

redis缓存雪崩、缓存击穿和缓存穿透是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

redis缓存雪崩、缓存击穿和缓存穿透是什么

这篇文章主要介绍了redis缓存雪崩、缓存击穿和缓存穿透是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇redis缓存雪崩、缓存击穿和缓存穿透是什么文章都会有所收获,下面我们一起来看看吧。缓存雪崩首先来看看
2022-11-30

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

使用redis作为缓存时,存在一些应用问题,包括缓存穿透、缓存击穿、缓存雪崩。 Redis缓存穿透、缓存击穿缓存雪崩redis常被用于作为后台数据库的缓存,缓存一些热点访问数据,根据局部性原理,缓存能够处理大部分请求。当请求数据未命中缓存时,才会引起对数
Redis缓存穿透、缓存击穿、缓存雪崩
2014-07-07

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

正常情况下,一个请求过来,首先判断key是否存在,如果key存在,直接返回;如果key不存在或者已过期,查询数据库,如果数据库中存在数据,则更新缓存并返回数据;如果不存在,则直接返回空。

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

缓存雪崩:比如给缓存中的key设置了统一的过期时间,而在过期时间点,有大量的请求进来,这个时候redis中没有用户请求的资源,所以所有的请求会全部拥到数据库,如果数据库有报警监测的话,可能会报一下警,然后数据库就挂掉了。如果这时候把数据重新起来,redis上还
2017-11-21

Redis系列(六)Redis 的缓存穿透、缓存击穿和缓存雪崩

NoSQL 开发中或多或少都会用到,也是面试必问知识点。最近这几天的面试每一场都问到了。但是感觉回答的并不好,还有很多需要梳理的知识点。这里通过几篇 Redis 笔记整个梳理一遍,后面再加上面试题。Redis 系列:1. Redis系列(一)Redis入门2.
Redis系列(六)Redis 的缓存穿透、缓存击穿和缓存雪崩
2021-02-26

Redis缓存击穿、缓存穿透、缓存雪崩如何解决

本篇内容介绍了“Redis缓存击穿、缓存穿透、缓存雪崩如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Redis缓存使用场景Redis
2023-07-05

大厂面试Redis:缓存雪崩、缓存穿透、缓存击穿

眼光不错,小伙子,看到这篇文章了就血赚,这篇文章绝对让你学到开心,这是面试的杀器,其实Redis这个东西吧,我个人认为,真的真的很强大,但是呢,又感觉被吹得有点过头了。

总结一下Redis的缓存雪崩、缓存击穿、缓存穿透

Redis的使用,可以有效地提高系统的性能和可用性。但是在使用过程中,需要注意缓存击穿、缓存穿透和缓存雪崩等问题,采用适当的解决方案来避免这些问题的发生,从而保证系统的稳定性和可靠性。

Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?

缓存击穿(失效)指的是数据库有数据,缓存本应该也有数据,但是缓存过期了,Redis 这层流量防护屏障被击穿了,请求直奔数据库。

Redis的缓存雪崩和缓存击穿是什么

缓存雪崩:指在缓存中大量的缓存数据同时失效或者被清除,导致大量的请求直接落到数据库上,导致数据库压力瞬间增大,甚至造成数据库宕机的现象。缓存击穿:指一个缓存键在失效的瞬间,同时有大量的请求访问该键,导致这些请求都直接落到数据库上,从而导致数
Redis的缓存雪崩和缓存击穿是什么
2024-05-07

一篇学会缓存穿透、缓存击穿、缓存雪崩

当查询数据库和缓存都无数据时,因为数据库查询无数据,出于容错考虑,不会将结果保存到缓存中,因此每次请求都会去查询数据库,这种情况就叫做缓存穿透。

redis缓存雪崩和缓存击穿区别

缓存雪崩与击穿的区别:发生时间:雪崩是多个缓存同时失效,击穿是单个缓存失效。影响范围:雪崩影响所有缓存,击穿仅影响单个热点数据。导致原因:雪崩是由不当的过期策略引起的,击穿是由缓存穿透或热点数据未缓存引起的。影响程度:雪崩可能导致服务不可用
redis缓存雪崩和缓存击穿区别
2024-04-19

缓存穿透、缓存击穿、缓存雪崩区别和解决方案

前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。
数据库缓存2024-11-30

Redis缓存雪崩、穿透、击穿三步曲

本文介绍了缓存雪崩产生的原因是因为短时间内大量缓存同时失效,而导致大量请求直接查询数据库的情况。

编程热搜

目录