加入收藏 | 设为首页 | 会员中心 | 我要投稿 阿坝站长网 (https://www.0837zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

你也会用动态规划

发布时间:2021-02-20 12:35:04 所属栏目:评论 来源:互联网
导读:这个比较好理解,就不废话了。 缓存时间增加随机值 这个主要针对的是「缓存定时过期」机制下的取巧方案。它的目的是避免多个缓存key在同一时间失效,导致压力更加集中。 比如,你有10个key,他们的过期时间都是30分钟的话,那么30分钟后这10个key的所有请求

这个比较好理解,就不废话了。

缓存时间增加随机值

这个主要针对的是「缓存定时过期」机制下的取巧方案。它的目的是避免多个缓存key在同一时间失效,导致压力更加集中。

比如,你有10个key,他们的过期时间都是30分钟的话,那么30分钟后这10个key的所有请求会同时流到db去。

而这里说的这种方式就是将这10个key的过期时间打乱,比如设置成25、26、27、...、34分的过期时间,这样压力就被分散了,每分钟只有一个key过期。

最简单粗暴的方式就是在设置「过期时间」的时候加一个随机数字。

cache.set(key,cacheValue,30+random())

总体来看,相比后者,前者的适用面更广,所以Z哥建议你用「加锁排队」作为默认的通用方案不失为一个不错的选择。

「缓存穿透」、「缓存雪崩」傻傻分不清楚?

如果你听说过「缓存穿透」的话,可能会问:「缓存雪崩」和「缓存穿透」一样吗?

从产生的效果上看是一样的,但是过程不同。

来举个例子。例子纯属虚构,别太在意合理性。

在一个方圆一万里的地区内,只有一个修手机的老师傅。他收了一个徒弟,希望徒弟能帮他分担掉一部分的工作压力。这里的老师傅可以看作是DB,徒弟看作是缓存。

老师傅对徒弟说,如果遇到你不会做的事你来请教我。

然后,一个客户过来说要修一下他的卫星电话,徒弟去请教老师傅,老师傅说他也不会,先拒绝了吧。

但是由于没告诉他后续遇到修卫星电话的人该怎么做,所以后续这个客户一直来问,徒弟每次都又去请教老师傅。最终,在修卫星电话这件事上,徒弟并没有帮老师傅缓解任何的压力,快被烦死了。

上面这个故事就好比「缓存穿透」。

而「缓存雪崩」则是,由于徒弟年轻力壮,精力充沛,1小时能修20个手机,老师傅只能修10个(但是手艺好,更考究)。

然后,有一天徒弟请假了,但恰巧这天来了2000个修手机的,老师傅修不过来就被累垮了。

所以,「缓存穿透」和「缓存雪崩」最终产生的效果是一样的,就是因为大量请求流到DB后,把DB拖垮(正如前面故事中的老师傅)。

两者最大的不同在于,「缓存雪崩」问题只要数据从db中找到并放入缓存就能恢复正常(徒弟休假归来),而「缓存穿透」指的是所需的数据在DB中一直不存在的情况(老师傅也不会修)。并且,由于DB中数据不存在,所以自然每次从缓存中也找不到(徒弟也不会修)。

清楚了两者的区别之后,我们下面就来聊聊「缓存穿透」的常见应对方式。

缓存穿透

「缓存穿透」有时也叫做「缓存击穿」,产生的逻辑过程是这样,一直在虚线范围内流转。



(编辑:阿坝站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读