[英]Get all cache in ASP.NET Core 1
版本是rc1。 在我的旧项目中,有类似的代码
System.Web.Caching.Cache c = System.Web.HttpRuntime.Cache;
System.Collections.IDictionaryEnumerator cacheEnumerator = c.GetEnumerator();
while (cacheEnumerator.MoveNext())
{....}
在核心1中我使用IMemoryCache
,我可以通过键获得缓存
var c = this._memoryCache;
var data = c.Get("data");
我想创建一个列出所有缓存的视图。 如何在Core 1中获取所有缓存?
在github上查看ASP.NET Core的MemoryCache实现的源代码,您可以看到该类没有公开任何扫描或迭代缓存条目列表的功能。
您最接近的是使用反射来读取内部缓存字典:
private readonly Dictionary<object, CacheEntry> _entries;
将反射代码包装在一个接受IMemoryCache
的扩展方法中并返回一个IEnumerable<CacheEntry>
并且你很好 - 但是涉及到几个风险:
IMemoryCache
一个实现。 您可能有一天会用不同的实现替换它,这将会破坏。 IMemoryCache
的方法,但即使这样,也存在风险。 但是,了解风险,您可以前进并完成工作。
除了使用反射之外,您还可以在每次添加到缓存时添加到字典中,并使用缓存策略中的回调进行维护。 如果以这种方式处理它,则更少依赖于.net MemoryCache
。 可能会对Dictionary有一些并发性问题,但只要它在更新和删除时被锁定就应该没问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.