缓存过期

时间:2012-06-12 02:52:01

标签: c# asp.net .net caching

如何在asp.net中控制缓存过期?我使用绝对过期,缓存每3个小时到期。 我想添加一个条件,这样只有条件为真时,缓存才会在3小时结束时到期。否则,如果条件为假,则缓存不应该过期。

我有办法做到这一点吗?

我使用以下格式:

ctx.Cache.Insert("cachename", cacheValue, null,
                  DateTime.Now.AddHours(Int32.Parse(siteViewModel.ApplicationSettings["CacheDurationHours"])), System.Web.Caching.Cache.NoSlidingExpiration, 
                 System.Web.Caching.CacheItemPriority.Default,
                 null
                 );

持续时间为3小时。因此缓存会在3小时内自动过期。有没有办法用条件控制到期?

2 个答案:

答案 0 :(得分:4)

怎么样:

DateTime absoluteExpiration = condition ? 
                  DateTime.UtcNow.AddHours(...) : 
                  Cache.NoAbsoluteExpiration;
ctx.Cache.Insert(..., absoluteExpiration, Cache.NoSlidingExpiration, ...);

BTW the MSDN description of the absoluteExpiration parameter建议使用DateTime.UtcNow而不是DateTime.Now来计算绝对到期时间。

答案 1 :(得分:1)

您可以使cacheValue成为检查条件的委托

ctx.Cache.Insert("cachename", () => condition? null : cacheValue, null,
    DateTime.Now.AddHours(
        Int32.Parse(siteViewModel.ApplicationSettings["CacheDurationHours"])),
    System.Web.Caching.Cache.NoSlidingExpiration,
    System.Web.Caching.CacheItemPriority.Default,
    null
);

然后要检索它,你会使用

的内容
var del = ctx.Cache["cachename"] as Func<CacheValueType>;
if (del != null) cacheValue = del();

虽然更简单的方法是使用静态而不是缓存,只使用私有日期作为到期日期。