背景
在偶然情况下,调用微信api出现40001,accessToken is invalid。通过日志发现,获取的accessToken为null。
原因
因为微信分发一个accessToken最多有两个小时的有效时间,我们会在本地每半小时自动刷新accessToken,保存在redis,有效时间为100分钟。在刷新前会先删除redis缓存,然后再更新accessToken到redis缓存。刚好在删除后和重新更新accessToken前的时间间隙内,其它模块去redis拿accessToken,导致拿到的为null,导致无效accessToken异常。
另外,微信accessToken在两小时内被重新刷新后,旧accessToken还会有几分钟的有效时间。
总结
如果要刷新redis数据,直接set进去覆盖就好了。