Closed naozikaopa406 closed 3 months ago
新增测试截图 先写入缓存,再查询缓存个数为0,第三个获取刚才插入的缓存的值为“123123”.
未复现
增加了测试用例,已通过内存、Redis未复现问题 1.增加单元测试CacheTest,测试未复现 2.增加ValuesController测试接口TestCacheAsync,测试未复现
你是在哪里使用?可否截个完整代码,测试用例已提交
新版本缓存相关类,大概就这些,里面的代码应该是同步的。
然后应用启动的时候使用内存方式。
然后再MoneyCache和TimeCache里有用到,经过测试,确实有二级缓存效果。
最后再控制器里面用ICaching接口获取所有缓存key,count=0. 不知道是不是缺少某个文件造成的。。。
了解了
注意一下IMemoryCache
的注册,因为MemoryCache
无法获取所有Key,所以自己实现了MemoryCacheManager
检查一下是不是有其他注册类,注册了IMemoryCache
,只有这一个原因会导致获取所有Key获取不到
例如IpPolicyRateLimitSetup
中
重复注册了内存缓存services.AddMemoryCache();
或services.AddSingleton<IMemoryCache>
如果引用了第三方类库,他的注册方法里写了内存缓存,
你就在他方法下面重复注册services.AddSingleton<IMemoryCache>(provider => provider.GetService<MemoryCacheManager>());
就可以覆盖
你要检查一下其他注册类有没有重复注册,可以直接全局搜索关键字来检索
另外我将增加校验提示,如果GetAllCacheKeys
注入的不是MemoryCacheManager
会警告,为了健壮性不直接抛异常
经全文检索,没有其他地方注册IMemoryCache。然后用了最新的警告相关代码,正常了。。。
.NET 8 框架 ,经测试,Sqlsugar二级缓存确实生效,同一个使用缓存的SQL,多次调用,只执行了一次。但是获取不到key.
redis方式正常.分布式缓存有问题。