请教一个并发的问题....
发布于 4 年前 作者 iori2882 2699 次浏览 来自 问答

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

9 回复

说实话,没看懂啥意思。

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

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

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

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

@luanxuechao 您说的对,具体怎么加锁啊?用计数器么?

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

@zy445566 明白了,我试试啊~!这样应该是可以的

@zy445566 明白了,我试试啊~!这样应该是可以的…谢啦~

回到顶部