Cache.Insert("CacheKey", value, null, DateTime.Now.AddSeconds(30), TimeSpan.Zero, CacheItemPriority.Normal, null);
Cache.Insert("CacheKey", value, null, DateTime.Now.AddSeconds(30), System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
前者很少有命中.
后者才是按时间命中.
System.Web.Caching.Cache.NoSlidingExpiration实际也是设置为TimeSpan.Zero.
MSDN如是说:
使用后,该字段将 slidingExpiration 参数设置成 TimeSpan.Zero 字段,该字段具有常数值零。缓存项依照与 Insert 或 Add 方法调用相关的 absoluteExpiration 参数设置过期。
无法同时设置 absoluteExpiration 和 slidingExpiration 参数。如果要让缓存项在特定时间过期,可将 absoluteExpiration 参数设置为特定时间,并将 slidingExpiration 参数设置为 NoSlidingExpiration。
如果要让缓存项自最后一次访问该项后的某段时间之后过期,可将 slidingExpiration 参数设置为过期间隔,并将 absoluteExpiration 参数设置为 NoAbsoluteExpiration。
MSDN:示例
Cache.Insert("DSN", connectionString, null, DateTime.Now.AddMinutes(2), TimeSpan.Zero, CacheItemPriority.High, onRemove);
而这种方法,用户访问后,立即过期,缓存实际上根本无法命中.
MSDN上的示例都是如此.
?????