在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

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

137次阅读
没有评论

共计 1997 个字符,预计需要花费 5 分钟才能阅读完成。

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

缓存雪崩

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

缓存击穿

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

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

缓存穿透

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

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

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

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

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

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

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

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

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

布隆过滤器

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

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

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

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

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

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

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

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

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

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计1997字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国产亚洲一区二区三区在线观看 | 伊人久久青青草 | 久久不卡视频 | 四虎永久免费地址在线观看 | 久久久精品视频在线观看 | 九九热免费在线观看 | 九九精品99久久久香蕉 | 欧美丰满熟妇bbbbbb | 最近2019好看的中文字幕免费 | 国产精品无码一区二区三区电影 | 无码人妻av一区二区三区波多野 | 精品久久久久香蕉网 | 国产亚洲精品久久久久久无挡照片 | 中文字幕禁忌乱偷在线 | 四虎在线最新地址公告 | 国产md视频一区二区三区 | 毛片无码国产 | 日本免费一区二区三区在线看 | 亚洲五月综合缴情在线观看 | 美女黄网站免费观看 | 99re在线播放 | 男人扒开女人双腿猛进视频 | 欧美一级黄色毛片 | 午夜精品一区二区三区的区别 | 国产大陆亚洲精品国产 | 香蕉久久夜色精品国产小优 | 精品日产 | 亚洲欧美成人中文在线网站 | 欧洲人激情毛片无码视频 | 日本一道免费7788www | 精品国产第一国产综合精品 | 亚洲欧美日韩国产精品 | 男男19禁啪啪无遮挡免费 | 免费的三片播放器 | 四虎国产成人亚洲精品 | 四虎永久在线精品免费一区二区 | 欧美日韩综合网 | 欧美一进一出抽搐大尺度视频 | 亚洲色婷婷六月亚洲婷婷6月 | 一边啪啪一边呻吟av夜夜嗨 | 亚洲区欧美 |