您现在的位置是:首页» windows系统» redis缓存穿透击穿雪崩解决方案,redis缓存穿透与雪崩解决方案

redis缓存穿透击穿雪崩解决方案,redis缓存穿透与雪崩解决方案

2024-07-13 07:48:33
本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。原始数据保存在数据库中(例如MySQL、Hbase等),但DB的读写速度差,时间长。例如,4个核8G TPS = 500,Q

本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。

原始数据保存在数据库中(例如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引擎)中处理,以及所有流量流向数据库,给数据库带来很大压力。

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

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

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

XTw.com.Cn系统网专业应用软件下载教程,免费windows10系统,win11,办公软件,OA办公系统,OA软件,办公自动化软件,开源系统,移动办公软件等信息,解决一体化的办公方案。

免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!

联系邮箱:773537036@qq.com

标签: 缓存 击穿 雪崩