.Net 7.0 MemoryCache 获取所有缓存Key失效

.Net 7.0,用到微软的MemoryCache时,在封装通用方法时候需要获取所有CacheKey。

目前搜索到的方案都是直接取“_entries” 私有字段。 但在7.0版本之后被包裹在“_coherentState”中,且“_entries” 被划入运行时字段,需要通过GetRuntimeFields来获取。

首先说明_memoryCache变量是MemoryCache类的实例,具体代码如下:

1         const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
2         var coherentStateFiledInfo = _memoryCache.GetType().GetField("_coherentState", flags);
3         var coherentStateValue = coherentStateFiledInfo.GetValue(_memoryCache);
4         var entriesFiledInfo = coherentStateFiledInfo.FieldType.GetRuntimeFields().Where(f => f.Name == "_entries").FirstOrDefault();
5         var entries = entriesFiledInfo.GetValue(coherentStateValue);
6          
7         var cacheItems = entries as IDictionary;

这里 cacheItems 就是所有的key和value了。

posted @ 2023-03-08 14:00  InDulGed  阅读(243)  评论(0编辑  收藏  举报