0

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

有没有办法我可以做到这一点?

我正在使用以下格式:

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 小时后自动过期。有没有办法用条件控制到期?

4

2 回答 2

4

关于什么:

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

顺便说一句,absoluteExpiration 参数的 MSDN 描述建议使用DateTime.UtcNow而不是DateTime.Now计算绝对过期时间。

于 2012-06-12T07:04:07.230 回答
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();

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

于 2012-06-12T03:03:07.167 回答