2012-06-12 114 views
0

如何控制asp.net中的緩存過期?我使用絕對過期並且緩存每3小時過期一次。 NOw我想添加一個條件,以便只有條件爲真時,緩存應該在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個小時內自動失效。有沒有一種方法來控制到期條件?

回答

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(); 

線雖然更簡單的方法是使用代理一個靜態的而不是緩存,只是一個私人日期到期。

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計算絕對到期。