2010-03-12 65 views
5

我正在檢出ASP.NET 4.0中的OutputCacheProvider並使用它將我的輸出緩存存儲到MongoDb數據庫中。我無法理解Add方法的用途,它是OutputCacheProvider的重寫方法之一。當您將VaryByParam設置爲某些內容時,會調用Add方法。所以,如果我有VaryByParam =「id」,那麼Add方法將被調用。.NET 4.0實現OutputCacheProvider

但是在添加集之後,我也可以插入到Set方法中的MongoDb數據庫中。

public override void Set(string key, object entry, DateTime utcExpiry) 
{ 
    // if there is something in the query use the path and query to generate the key 
    var url = HttpContext.Current.Request.Url; 

    if (!String.IsNullOrEmpty(url.Query)) 
    { 
     key = url.PathAndQuery; 
    } 

    Debug.WriteLine("Set(" + key + "," + entry + "," + utcExpiry + ")"); 
    _service.Set(
     new CacheItem() { Key = MD5(key), Item = entry, Expires = utcExpiry } 
    ); 
} 

內部的設定方法我用PathAndQuery來獲取查詢字符串的PARAMS,然後做一個MD5的密鑰,並將其保存到MongoDB的數據庫。

看來像Add方法將是有用的,如果我正在做像VaryByParam =「自定義」之類的東西。

任何人都可以點亮OutputCacheProvider的Add方法嗎?

回答

8

他們是相似的,但有一個細微的差異。縱觀MSDN文檔爲OutputCacheProvider

  • Set - 「將指定 進入輸出緩存, 覆蓋入門如果 已經緩存」
  • Add - 「插入 指定的項進入緩存輸出 「。

的「添加」繼續說

「如果已經有在 緩存指定鍵的值時, 提供商必須返回一個值, 提供商必須備註不存儲使用Add方法 參數傳遞的數據 。Add方法存儲數據 如果不是已經在 緩存。如果數據在緩存中, Add方法返回它」

因此,對於尚未存在於緩存中的新值,它們的行爲將完全相同,但在值已存在的情況下,Set將更新它,而Add會保留原始值不變。