当前位置: 首页 > 网络应用技术

重新缓存破裂,穿透,雪崩概念和解决方案

时间:2023-03-08 12:56:39 网络应用技术

  缓存分解是指请求要访问的数据。没有缓存,但是数据库中有。

  这种情况通常是缓存到期的。这是一个热点钥匙。因此,许多用户的请求同时出现,并且没有在缓存中获取数据。压力立即增加,直接崩溃。

  因此,数据具有缓存,每个请求都会从缓存中快速返回数据,但是在某个时间点,缓存无效,并且没有对缓存中数据的请求。” Caches。

  1.锁定解决方案的解决方案的想法是,如果未从redis获得数据,请让线程转到数据库查询数据,然后构建缓存。

  伪代码如下:

  该方案可以解决问题,但是当线程构建缓存时,其他线程正在睡觉或查询。

  而且,在这个高且潜伏期的高时代,您实际上让用户等待珍贵的100m。其他人可能比您快100毫米,而且他们抢走了大量用户。

  2.在计划的第二个背景中继续后台的想法是,在背景中打开了定时任务以积极更新即将到来的数据。

  例如,当程序APE设置Jay的热点时,到期时间为60分钟。在第55分钟,背景程序将转到数据库以查询数据并将其放在缓存上。同时,将缓存设置为60分钟。

  3.计划的计划有点简单而粗鲁。

  看到名望,如果将实际场景结合在一起,您可以将此键与脚趾一起考虑,这是热键,并且会有很多访问此数据的请求。您对此类数据进行了什么设置?它直接而永不过期。

  但是,对特定情况的具体分析,没有解决世界的解决方案。

  例如,如果此钥匙属于各种“自来水”怎么办?就像Nezha一样,您无法想到这个钥匙会做出如此大的举动。您应对这种情况吗?

  因此,具体的情况,特定的分析。最终计划是常规解决方案的组合或变体。

  捕获渗透是指访问数据的请求。没有缓存和数据库,用户可以在短时间内启动此类请求,并且每次访问数据库服务时,都会在数据库上造成压力。。

  根据图片,在缓存中没有获得数据,然后我询问了数据库。我没想到数据库中没有。

  1.计划1缓存空对象缓存,空对象是,即使在数据库中找到的空对象,我们也会缓存空对象。

  缓存空对象下次将击中此空对象,并且缓存层将处理此请求,这不会在数据库上造成压力。

  这很容易实施,开发成本非常低。但是,以下问题必须注意:

  第一个问题:如果您在某个时间缓存记录,那么您在数据库中值得,您该怎么办?

  我知道三个解决方案:

  解决方案1:设置缓存时,请同时设置有效期,以便在到期后,您将重新检查最新的数据和缓存。

  解决方案2:如果真实时间要求很高,则在编写数据库时编写缓存。这可以确保真实的性质。

  解决方案3:如果真实时间要求不那么高,则在编写数据库时将数据发送到消息队列,请让消息队列通知处理缓存以获取最新数据的逻辑。

  第二个问题:对于恶意攻击,请求时键通常是不同的,只有一次请求,则如果要缓存这些键,因为每个密钥仅请求一次,那么每次您每次询问数据库时,数据库不受保护到数据库的保护?

  目前,您告诉他:“ Bloom过滤器,理解”。

  2.计划2 Bloom滤波器什么是Bloom过滤器?

  从本质上讲,Bloom滤波器是一种数据结构,是一种相对聪明的概率数据结构(概率数据结构),其特征是有效的插入和查询,可以用来告诉您“某些东西必须不存在或可能存在”。

  与传统的数据结构(例如列表,集合,地图)相比,它更有效且空间较小,但缺点是其返回的结果是概率,而不是精确的。

  因此,Bloom过滤器返回的结果是概率,因此它可以减轻数据库的压力并不能完全阻止它。这一定很清楚。

  Guava组件可用于实现Bloom过滤器,但Guava基于内存,因此不适合分布式环境。

  要在分布式环境中使用Bloom过滤器,有必要摆脱Redis,Redis可用于实现Bloom过滤器。

  你看到了吗?redis不仅习惯缓存。这是一个知识点。

  雪崩是指同时在缓存中大多数数据的到期时间,查询数据量很大。目前,缓存中没有任何情况,并且数据库中存在一些情况。在数据库上击中了请求,导致数据库流量增加,压力立即增加,并且崩溃直接崩溃。

  与前面提到的缓存渗透不同,带有大量请求的缓存多年生请求与查询相同的数据平行。

  雪崩是不同数据的到期时间,这导致这些数据在缓存中找到。

  或直接悬挂缓存服务,因此缓存已消失。

  简而言之,请求在数据库上受到打击。对于数据库,雪崩是雪崩。

  1.解决方案OnePlus锁定如果是同一时间的大量缓慢存在,那么我们可以互相添加。

  等等,不是彼此的先前介绍吗?

  是的,缓冲区雪崩可以看作是多个缓存断裂,因此您也可以使用互锁的解决方案,在这里不会重复。

  2.计划2“峰值”如果是同一时间的大量浮雕,那么我们还有另一种解决方案来设置一个短随机到期时间,以避免使用较大的时间避免大量大量的大量数量。由于同时存在而引起的高速缓存。

  例如,设置钥匙类型的到期时间为10分钟,在10分钟的基础上,再加上60秒的随机事件,例如这样::

  3.计划III缓存群集如果挂起缓存服务,则大多数原因是单点应用程序。你可以找出答案。

  当然,这是一个前计划。使用单点时,您必须考虑服务引起的问题。因此,群集会提前部署以提高服务的可用性。

  4.计划四个流量限制+本地缓存,如果您说群集群集也被悬挂怎么办?实际上,这是为服务服务的考虑:

  鲁棒性是系统的鲁棒性。它是指对可能导致程序崩溃的各种情况的完全考虑,并进行相应的处理。当程序遇到异常条件而不会崩溃时,它可以正常工作。

  目前,您可以考虑引入流媒体修复器(例如Hystrix),然后实现服务降级。

  假设您当前的限制设置在一秒钟内最多设置了5,000个请求,则此时有8,000个请求,并且将降级3,000个额外的供您友好的请求,以对用户友好提示。

  如果5,000个请求进来,则如果悬挂了redis,则仍然可以翻转数据库,因此,此时,我们添加类似于echcacache或guava Cache的本地缓存的逻辑,这可以帮助数据库可以帮助该数据库数据库。减压并在困难中生存。

  5.计划5尽快恢复它,对吗?

  兄弟,你挂了吗?快点参加这项服务。

  推荐阅读:Springboot集成了Redis,封装了重新介绍工具