RPM*_*984 13 c# asp.net caching memorycache
我正在使用新的.NET 4.0 Caching命名空间:System.Runtime.Caching.
现在,我只是做一些原型/摆弄新的API,以便找出真正的应用程序的最佳选择.
与此一致,我正在尝试创建一个页面(ASP.NET MVC),它基本上会转储缓存中的所有内容,尤其是以下信息:
但是,除了键/对象之外,我似乎无法获得任何东西.
这是我正在玩的代码:
public ActionResult Index()
{
var cache = MemoryCache.Default;
// i can get the list of cache keys like this:
var cacheKeys = cache.Select(kvp => kvp.Key).ToList();
// i can also get a strongly-typed "CacheItem" like this:
CacheItem item = cache.GetCacheItem("someKey");
}
Run Code Online (Sandbox Code Playgroud)
我希望"CacheItem"类会暴露我需要的信息(到期,依赖等 - 至少作为"getters").
但事实并非如此.它拥有的只是键,值和区域名称的属性.
我如何检查缓存中的项目并吐出我需要的信息?
我缺少名称空间/类吗?
编辑
看起来有一个ChangeMonitor类,但是再次 - 这不会给出过期信息,它只允许您在删除缓存项时订阅事件.
有必须是一个办法只有抢在缓存中的项目,而当他们到期.
编辑2
不知道这是否应该是一个单独的问题,而且 - 我对我应该给我的ObjectCache的生命周期感到困惑.MSDN说它不是单例,你实际上可以创建多个ObjectCache实例.这意味着什么,我必须在访问ObjectCache实例时使用完全锁定的单例?
我不认为有一种方法可以在CacheItemPolicy添加到缓存集合后检索它.
解决此问题的最佳方法是将策略对象与要缓存的项目一起缓存,只需将"策略"附加到密钥名称,以便以后可以检索策略.这显然假设您可以控制首先将项目实际添加到缓存中.示例如下:
public ActionResult Index()
{
string key = "Hello";
string value = "World";
var cache = MemoryCache.Default;
CacheItemPolicy policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTime.Now.AddDays(1);
cache.Add(new CacheItem(key, value), policy);
cache.Add(new CacheItem(key + "Policy", policy), null);
CacheItem item = cache.GetCacheItem(key);
CacheItem policyItem = cache.GetCacheItem(key + "Policy");
CacheItemPolicy policy2 = policyItem.Value as CacheItemPolicy;
ViewBag.Message = key + " " + value;
return View();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10837 次 |
| 最近记录: |