2012-06-12 4 views
0

Как я могу контролировать истечение срока действия кеша в asp.net? Я использую абсолютное истечение, и кеш истекает каждые 3 часа. NOw Я хочу добавить условие, так что только если условие истинно, кэш должен истечь в конце 3 часов. Else, если условие ложно, кеш не должен истекать.Срок действия кеша

Есть ли способ, которым я могу это сделать?

Я использую следующий формат:

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 вычислить абсолютный срок действия.

Смежные вопросы