CNode

请教一个并发的问题....

问答
Iiori2882发布于6 年前最后回复6 年前9 回复3863 浏览0 收藏

###问题描述: 服务器B调用服务器A的接口,接口返回token和ttl剩余时间.服务器B拿到token和tll后,按照 [ttl-2]秒的方式进行缓存. 问题就出在这里,他是按照ttl减少2秒的方式缓存,那么在这个2秒期间内,他的每一次请求都要访问服务器接口.有没有什么策略,能尽量减少这样情况发生?无论是在服务器B上做策略还是在服务器A上做策略都可以....

查看回复

回复 (9)

M
myy#1·6 年前

说实话,没看懂啥意思。

L
luanxuechao#2·6 年前

这不是一个缓存击穿的问题吗?加一个锁,只有一个请求去拿服务器A的token,然后其他请求挂起吧,等拿到锁之后,就可以拿缓存了

Z
zy445566#3·6 年前

你减2秒如果是提前失效,这没问题啊。但你这个描述有点像减2秒生效

I
iori2882#4·6 年前
引用 myy说实话,没看懂啥意思。

@myy 额,就是服务器B为了取token的时候保证不失效.他把token的生命周期减少了2秒,本来token生命周期100秒,他就缓存98秒,那么98秒到100秒直接的请求,全部都去服务器A拿token....好像2楼说的对,缓存击穿了

I
iori2882#5·6 年前
引用 zy445566你减2秒如果是提前失效,这没问题啊。但你这个描述有点像减2秒生效

@zy445566 服务器B为了取token的时候保证不失效.他把token的生命周期减少了2秒,本来token生命周期100秒,他就缓存98秒..服务器B的缓存是失效了,压力都给服务器A了

Z
zy445566#7·6 年前

大致明白了,你设置一个全局变量和监听事件,发现token过期后,只要B发生请求前把这个全局变量设置成1,那么B发生第二个请求的时候,发现这个全局变量是1的时候,就不要去请求了,而改成监听事件。 当B第一个请求回来,触发监听事件发送同时再把全局变量设置为0,这样B的其它请求其实就是等B的第一个请求完成的数据了。

参与回复
登录后即可参与回复。登录