2012-10-10 27 views
4
_cache.Insert(cacheKey, userList, null, 
Cache.NoAbsoluteExpiration, 
new TimeSpan(0, 15, 0), 
CacheItemPriority.High, null); 

我上面的代码似乎没有在3分钟后过期缓存,userList对象从数据库中提取数据并更新,但缓存在15分钟后不会过期。下面的缓存项目会在15分钟后过期吗?

出了什么问题?

回答

5

您正在通过使用Cache.NoAbsoluteExpiration明确地将缓存设置为永不过期。你想用Cache.NoSlidingExpiration代替:

使用时,此字段设置slidingExpiration参数到 TimeSpan.Zero领域,它具有零恒定值。缓存的 项目将根据与InsertAdd方法调用相关联的absoluteExpiration参数 到期。

+0

到期了,我发现这混乱的B/C的方法调用的签名要你同时插入绝对和滑动倍。它不是一个或另一个? – loyalflow

+0

我认为,如果页面的缓存值更长,页面的缓存可能会影响控件缓存,这可能是相关的。 – MisterIsaak

3

你传入15分钟,以滑动过期参数:http://msdn.microsoft.com/en-us/library/05kd8d77.aspx

插入的对象的最后访问的时间与该对象过期的时间之间的时间间隔。如果此值相当于20分钟,则该对象将在上次访问后20分钟过期并从缓存中删除。如果使用滑动过期,则absoluteExpiration参数必须为NoAbsoluteExpiration。

如果您的缓存对象每隔15分钟访问一次,它将永远不会过期。

_cache.Insert(
     cacheKey, 
     userList, 
     null, 
     new TimeSpan(0, 15, 0), 
     Cache.NoSlidingExpiration, 
     CacheItemPriority.High, 
     null); 

现在该项目将在15分钟内

调用插入时