CachingCallHandler无法使缓存对象无效?

时间:2010-08-09 20:29:35

标签: .net asp.net enterprise-library

企业库的CachingCallHandler使用NoAbsoluteExpiration缓存项目。但是,我没有看到使缓存无效的方法。那个人希望永远缓存的项目无法使其失效,这没有任何意义。

在我实现自己的失效方法之前,我想验证是否存在一个我不知道的微不足道的失效机制?

更新

看起来这不是内置的。但是,我认为它正在使用gethashcode作为密钥。因此我可能会删除无效的密钥。

我仍然想弄清楚为什么会想要滑动过期。当然,如果可以将到期时间与数据库联系起来或者使用无效更新文件,那么它可能是理想的。然而,如果没有这种高级缓存失效机制,它似乎毫无意义。

1 个答案:

答案 0 :(得分:0)

您写道:

  

那个人希望缓存一个项目   永远

但正如您稍后提到的,它实际上是一个滑动过期,因此如果在一定时间内未访问这些项目,则最终会从缓存中删除这些项目。

不幸的是,CachingCallHandler仅使用滑动过期:

以下是它在代码中的作用:

private void AddToCache(string key, object value)
{
    object[] cacheValue = new object[] { value };
    HttpRuntime.Cache.Insert(
        key,
        cacheValue,
        null,                      // No Cache Dependencies
        Cache.NoAbsoluteExpiration,
        expirationTime,            // Sliding expiration (default 5 minutes)
        CacheItemPriority.Normal, 
        null                       // No CacheItemRemovedCallback
    );
}

至于这种方法的重点是什么,似乎确实有点受限。但是,它确实解决了具有不需要按需刷新的相当静态数据的情况。

请注意,由于“无法解析的安全漏洞”,CachingCallHandler已从Enterprise Library 5.0中删除,因此您可能不想使用此功能。