企业库的CachingCallHandler使用NoAbsoluteExpiration缓存项目。但是,我没有看到使缓存无效的方法。那个人希望永远缓存的项目无法使其失效,这没有任何意义。
在我实现自己的失效方法之前,我想验证是否存在一个我不知道的微不足道的失效机制?
更新
看起来这不是内置的。但是,我认为它正在使用gethashcode作为密钥。因此我可能会删除无效的密钥。
我仍然想弄清楚为什么会想要滑动过期。当然,如果可以将到期时间与数据库联系起来或者使用无效更新文件,那么它可能是理想的。然而,如果没有这种高级缓存失效机制,它似乎毫无意义。
答案 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中删除,因此您可能不想使用此功能。