如何在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小时内自动过期。有没有办法用条件控制到期?
答案 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();
虽然更简单的方法是使用静态而不是缓存,只使用私有日期作为到期日期。