U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 帮助中心 > PE系统相关教程 >

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

来源:http://www.tudoupe.com时间:2022-04-09

原始数据保存在数据库中(例如MySQL、Hbase等),但DB的读写速度差,时间长。

例如,4个核8G TPS = 500,QPS = 约10 00,读写平均需要10至100毫秒。

对其MacBook Pro 2019进行了Redis性能测试,使用Redis作为缓冲系统来弥补DB的不足之处,具体如下:

随着TPS和QPS的点击率达到10万,我们建立了一个缓存结构,将原始数据储存在数据库中,并将副本储存在缓存中。

当提出要求时,将删除缓存中的数据,如果有,则直接退回缓存中的数据。

如果缓存中没有数据, 请从数据库读取数据, 将其写入缓存, 然后返回结果 。

这是平稳过渡吗?暗藏处设计不当将产生重大影响,本条将解释暗藏处使用共有的三种困难和解决办法:

  • 缓存击穿(失效);
  • 缓存穿透;
  • 缓存雪崩。

缓存击穿(失效)

高相匹配流程, 此数据由热点数据访问, 数据库中可访问所请求的数据, 但Redis 中的数据过期了, 数据库的后端对于将数据装入并写入 Redis 是必要的 。

关键词:数据故障、单一热点数据、高逗量测量

不幸的是,由于DB距离很近,DB可能失败,无法提供服务,如下图所示:

解决方案

过期日期 +随机数

我们没有为热点数据规定一个终止日期,以便查询可在缓存中处理,而可充分利用雷迪斯进行高量输送。

相反,在过期时间添加随机值。

当创建缓存的过期时间时, 请应用公式 : 过期时间 = baes time + 随机时间 。

也就是说,当相同的业务数据被保存时,在基本到期时间上加上一个随机的过期时间,使数据在未来逐渐过期,防止一瞬间出现全损期,给DB造成过度压力。

预热

将热数据预先定位在 Redis 中,并配置较长到期时间的热数据

使用锁

当发现缓存失灵时,数据不会立即从数据库中装入。

相反,获取分布式锁、购买用于执行数据库查询和写入数据以进行缓存操作的锁,以及获取要失败的锁,都表明当前线索正在实施数据库查询操作,当前线索在重试前有一段时间会沉睡。

这限制了能够从数据库读取数据的请求数量。

伪代码如下:

缓存穿透

缓存穿透 : 这意味着有特定请求查找不存在的数据, 即数据库中没有数据或 Redis 。

因此,每项请求都渗透到数据库中,并建立了缓存库,给数据库造成很大压力,扰乱日常服务。

如图所示:

解决方案

  • 缓存空值: 当当前请求的数据或数据库不存在时, 设置默认值( 例如无) 。 当随后进行查询时, 直接返回空值或默认值 。
  • Bronn 过滤器: 由于数据正在存储到数据库中, 请与 Bronn 过滤器同步此 ID 。 当 Bronn 过滤器中找不到 id 时, 这意味着请求的查询不能记录在数据库中, 因此不能搜索数据库 。

BloomFilter想要隐藏整组密钥, 这就需要一套小的密钥, 10亿个数据项目, 范围最广, 因为10亿个数据简介需要1.2GB的内存。

让我们现在讨论布朗过滤器。

BloomFilter 的过程从将存储空间分配到位数组开始, 数组的起始位值设置为 0 。

在添加项目时,使用 k 不同的散列函数进行计算,然后将元素散列图的所有 K 位置设置为 1 。

检查是否基于 k- Hash 函数计算 k 的位置而存在密钥, 或该位置是全部 1. 1 。 如果该位置是全部 1, 则密钥存在; 否则它就不会存在 。

如下图所示:

因为桥函数冲突, 模糊过滤器计算错误 。

这里的错误率指的是 BloomFilter 认为钥匙存在的可能性, 但是它并不存在, 因为它包含密钥的散列值, 而不是密钥的值 。

因此,这种钥匙有可能存在,它的内容不同,但经过多次重复之后,它具有同样的散装物价值。

因为布鲁姆菲尔特的钥匙不存在这是完全不存在的。反证法,如果此密钥确实存在,它必须是其中之一,它必须是其中之一。而不会是 0。模糊过滤器并不总是可用 。

缓存雪崩

Cache avalanche提到许多请求无法在Redis缓存系统中处理,导致数据库负荷增加,甚至坠机。

这是由于两个主要因素:

  • 大量热点数据同时失效,导致大量请求需要数据库访问和缓存书写。
  • Redis机器运转不良 缓存系统运转不良

大量数据同时过期的缓存

数据保存在缓存系统中,并确定了一个终止日期,然而,由于大量数据同时过期,因此未达到终止日期。

如果流量高,该系统将把所有查询与数据库连接,以收集数据,从而增加数据库的压力。

缓冲雪崩和庆祝性影响(失败)的主要区别是,当大量数据同时失效时会发生缓冲雪崩,而当热点数据过期时会发生庆祝性影响(失败)。

如下图:

解决方案

过期时间添加随机值

过期时间 = 蜜蜂时间 + 随机时间(小随机数量,如随机添加一至五分钟),以防止为大量数据设定相同的过期时间 。

这不会同时导致热点数据完全崩溃,而且终止期将极短,保证在满足业务需要的同时短时间间隔。

接口限流

当核心数据无法获取时,会为查询方法提供界面限制保护。例如,每秒设定10,00个请求。

当使用核心数据接口时, 缓存并不存在允许从数据库查询并在缓存中存储结果 。

因此,只有一小部分请求将转交数据库,从而减少工作量。

“流动限制”一词是指能够管理在业务系统前端输入系统的每秒请求数量,以避免向数据库发送过多请求。

如下图所示:

Redis 故障处理机

Redis 示例可以处理100,00 QPS, 但数据库示例只能处理100 QPS 。

Redis机器安装后,将产生大量数据库查询,导致大规模雪崩。

解决方案

对于由缓存系统故障引起的地籍雪崩,有两种选择:

  • (a) 服务熔炼和接口流量限制;
  • 创建可用性高的缓存集群系统 。

服务熔断和限流

业务系统中高复杂度使用服务的熔炼降低了服务的可用性,因此保证了系统的可用性。

当在缓存中发现异常点时,服务熔炼是错误数据直接返回前端,使所有流量无法到达数据库,并导致崩溃。

就缓冲雪崩而言,服务熔炼和流量限制是减少雪崩对数据库影响的两个备选方案。

创建高可用性缓存群集 。

所以,缓存系统必须建立一个高可用性再分解集群。例如,考虑 " Redis哨兵集群 " 或 " Redis Cruster集群 " 。如果Redis的主节点失败,节点和主要节点之间也可以互换。继续提供缓存服务,避免了地籍学实例引起的缓冲雪崩问题。

总结

  • 缓存渗透是指数据库中缺乏这种数据,导致查询直接转到数据库,而数据库几乎不存在缓存系统。
  • ** 缓冲爆炸(故障)** 是指数据库中的数据,这些数据也应在缓存中,但缓存过期,交通屏蔽Redis被打破,要求直接访问数据库。
  • Cache avalanche是指大量热点数据无法在Redis缓存(大区热点数据缓存故障,Redis引擎)中处理,所有流量都流向数据库,给数据库带来严重压力,给数据库造成严重压力,是指大量热点数据无法在Redis缓存(大区热点数据缓存故障,Redis引擎)中处理,以及所有流量流向数据库,给数据库带来很大压力。

你认为自己是个好作家吗?

如果有错误,请尽快通知我。

我很期待能吸引我的小朋友们的注意

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息