IMemoryCache的AbsoluteExpirationRelativeToNow不生效问题求助
IMemoryCache的AbsoluteExpirationRelativeToNow不生效问题求助
各位大佬,想请教个IMemoryCache的棘手问题。我现在需要把一个access token存在内存里,因为这个token获取后24小时才会过期,用内存缓存的话能避免频繁调用接口取新token。
我已经在服务里注入了IMemoryCache,还写了个GetAccessToken方法,每次业务逻辑需要用token的时候就调用这个方法:
private async Task<string> GetAccessToken() { if (!_cacheService.TryGetValue(TokenKey, out string token)) { var newToken = await DoGetAccessToken(); // 这里设置24小时后自动过期 _cacheService.Set(TokenKey, newToken, new MemoryCacheEntryOptions() { AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(24) }); token = newToken; } return token; }
但实际运行起来发现,这个AbsoluteExpirationRelativeToNow的设置完全没按预期工作——要么token还没到24小时就被缓存清掉了,得重新去拿;要么过了24小时居然还能取到旧token,导致接口直接报错。
我自己先排查了几个点:
TokenKey是固定的常量,绝对没有拼写错误DoGetAccessToken能正确获取到有效的新token,这部分逻辑没问题- 服务进程全程没重启过,排除了进程重启导致缓存丢失的情况
有没有大佬遇到过类似的坑?或者我哪里的写法有问题?麻烦指点下,万分感谢!
内容来源于stack exchange
相关产品推荐
相关产品推荐

