2011-02-08 72 views
13

我正在使用新的.NET 4.0高速緩存命名空間:System.Runtime.Caching如何檢查System.Runtime.Caching.ObjectCache內的緩存策略?

現在,我只是在做一些原型/新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"); 

} 

我本來希望「CacheItem」類將暴露我所需要的信息(有效期,依賴關係等 - 至少在「干將」) 。

但事實並非如此。它所具有的是關鍵,值和區域名稱的屬性。

我怎麼能檢查在緩存中的項目和吐出我所需要的信息?

是否有一個命名空間/類我失蹤?

編輯

貌似有一個ChangeMonitor類,但再次 - 這並沒有給過期的信息,它只是允許時被刪除緩存項,您可以訂閱的事件。

There 必須是一種只抓取緩存中的項目以及何時到期的方法。

EDIT 2

不知道這應該是一個單獨的問題,也是 - 我很困惑,什麼有生之年,我應該給我的ObjectCache。 MSDN表示這不是一個單例,並且實際上可以創建多個ObjectCache實例。這是什麼意思,但我必須在訪問ObjectCache實例時使用完全鎖定的單例?

回答

9

它不看,我認爲有檢索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(); 
    } 
+0

是的,我想過這個。也許只是爲了原型,我會這樣做 - 然後在im完成時將代碼改回正常。儘管如此,我還是希望在現場服務器上使用輕量級緩存監控程序 - 聽起來像是不可能的。 – RPM1984 2011-02-09 21:17:04