缓存分解是指请求要访问的数据。没有缓存,但是数据库中有。
这种情况通常是缓存到期的。这是一个热点钥匙。因此,许多用户的请求同时出现,并且没有在缓存中获取数据。压力立即增加,直接崩溃。
因此,数据具有缓存,每个请求都会从缓存中快速返回数据,但是在某个时间点,缓存无效,并且没有对缓存中数据的请求。” 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,封装了重新介绍工具