资讯详情

老徐和阿珍的故事:缓存穿透、缓存击穿、缓存雪崩、缓存热点,傻傻分不清楚

,男,本名徐福贵,从事Java相关研发工作多年,职场老油条,钓鱼专家。虽然他们年纪不大,但他们很焦虑。他们被称为老徐。据说之前炒某币失去了所有家产,现在甚至还欠债。

,女,本名陈家珍,刚入职的实习生虽然是职场菜鸟,但聪明好学。据说她是学校四大校花之一。追求她的人从旺角排到铜锣湾,但她仍然单身。

在高并发下遇到瓶颈时,经常使用缓存来提高整个系统的性能。

老徐:嗯,但缓存可以大大提高整个系统的性能,但同时也引入了更多的复杂性。

阿珍点点头说:是的,我一直分不清缓存穿透、缓存击穿、缓存雪崩、缓存热点,经常混淆。

老徐立刻自信地说:这个我懂啊,你听我告诉你。

缓存穿透

缓存穿透是指在查询缓存数据时,缓存和数据库中都没有对应数据,在缓存中找不到对应的数据,每次都要去数据库中再查询一遍,然后返回数据不存在。

在这种情况下,缓存并不能分担数据库访问的压力。一般来说,读取不存在数据的要求不会太大,但如果有恶意攻击,故意访问大量不存在的数据,会给数据库带来很大的压力。

阿珍:太可怕了,万一遇到这样的攻击,该怎么办?

老徐:这很容易处理,一般有两种方法。

第一个是:如果未找到查询数据库中的数据,则直接将特定值存储在缓存中。读取缓存后,您将获得特定值,并直接返回空值,因此您不会继续访问数据库。

二是:将现有数据放在一起key存储在布隆过滤器中。当有新的要求时,先到布隆过滤器查询是否存在,如果没有直接返回的数据;如果有这些数据,请查询缓存查询数据库。

缓存击穿

缓存击穿是指在查询缓存数据时,数据库最初有数据,但没有缓存。生成缓存数据需要很长时间或大量的资源。此时,如果有大量的数据要求,它将对数据库甚至系统造成更大的压力。

阿珍:哦?怎么解决?

老徐:这个很好解决,一般有两种做法。

一是为缓存更新操作增加增加的保护,以确保只有一个线程可以进行缓存更新操作获得更新锁的线程要么等待锁释放,要么直接返回空值或默认值。

二是定期更新后台操作中的缓存,而不是在访问页面时生成缓存数据。这样,缓存就可以按照一定的策略定期更新,不会给存储系统带来很大的瞬时压力。

缓存雪崩

缓存雪崩是指当大量缓存同时失效或过期时,大量请求直接访问数据库,甚至长时间或大量资源计算缓存结果,导致系统性能急剧下降。

阿珍先说:这个我知道怎么解决!老徐反问:怎么解决?

阿珍回答说:同一类型缓存的过期时间可以设置随机值,例如:原过期时间为5分钟,在此基础上加060秒,过期时间变为5秒在6分钟内波动,有效防止大量缓存在同一时间点过期。

缓存热点

缓存热点是指大多数甚至所有业务请求都命中相同的缓存数据。

虽然缓存本身的性能相对较高,但对于一些特殊的热门数据,如果大多数甚至所有的请求都击中了相同的缓存数据,那么该数据所在的缓存服务器将面临巨大的压力。例如,电子商务的爆炸性产品在短时间内被数千万用户访问。

阿珍:遇到这种情况,该怎么办?

老徐:一般有两种方法可以解决这个问题:复制多份缓存副本和本地内存缓存。

复制多个缓存副本是将请求分散到多个缓存服务器上,以减轻缓存热点引起的单个缓存服务器的压力。在设计缓存副本时,需要注意一个细节:不同的缓存副本不应设置统一的过期时间,否则所有缓存副本都会同时生成,导致缓存的雪崩效应。

在客户端的本地内存中缓存热点数据,并设置故障时间。对于每个读取请求,首先检查数据是否存在于本地缓存中,如果存在,直接返回,如果没有,请访问分布式缓存服务器。

阿珍用崇拜的眼神看着老徐说:老徐,你太牛了,什么都懂!

老徐不好意思挠了挠头,说:也没了。

最后,谢谢你这么帅,还给我

标签: 挠性定点出力连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台