我正在检查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方法有所了解吗?
答案 0 :(得分:8)
他们是相似的,但有一点点差异。查看OutputCacheProvider类
的MSDN文档“添加”的评论继续说
“如果已有值 缓存指定的密钥, 提供者必须返回该值。该 提供者不得存储数据 通过使用Add方法传递 参数。 Add方法存储 数据,如果它还没有在 缓存。如果数据在缓存中, Add方法返回它“
因此,对于尚未存在于缓存中的新值,它们的行为相同,但是当值已存在时,Set会更新它,而Add会保留原始值。