.NET 4.0实现OutputCacheProvider

时间:2010-03-12 15:41:44

标签: asp.net caching .net-4.0

我正在检查ASP.NET 4.0中的OutputCacheProvider并使用它将我的输出缓存存储到MongoDb数据库中。我无法理解Add方法的目的,它是OutputCacheProvider的覆盖方法之一。将VaryByParam设置为某个值时,将调用Add方法。所以,如果我有VaryByParam =“id”,那么将调用Add方法。

但是在调用Add the Set之后我也可以在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 }
    ); 
}

在Set方法中,我使用PathAndQuery获取QueryString的参数,然后对密钥执行MD5并将其保存到MongoDb数据库中。

如果我正在做类似VaryByParam =“custom”之类的东西,似乎Add方法会很有用。

任何人都可以对OutputCacheProvider的Add方法有所了解吗?

1 个答案:

答案 0 :(得分:8)

他们是相似的,但有一点点差异。查看OutputCacheProvider

的MSDN文档
  • Set - “插入指定的 进入输出缓存, 如果是,则覆盖该条目 已缓存“
  • Add - “插入内容 指定的输入输入 高速缓存“。

“添加”的评论继续说

  

“如果已有值   缓存指定的密钥,   提供者必须返回该值。该   提供者不得存储数据   通过使用Add方法传递   参数。 Add方法存储   数据,如果它还没有在   缓存。如果数据在缓存中,   Add方法返回它“

因此,对于尚未存在于缓存中的新值,它们的行为相同,但是当值已存在时,Set会更新它,而Add会保留原始值。