2010-03-12 74 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会保留原始值不变。