cache.Add 参数一共有 7 个,我们先说下第 3 和第 7 个参数
第 3 个参数表示什么缓存依赖,比如微软与自家的 SQL Server 搭配得很好,它有一个 SqlCacheDependency,当我们使用它时,数据库表有变化时,缓存自动清空,示例:SqlCacheDependency Class (System.Web.Caching) | Microsoft Docs。我们不需要时,可设置 null。
第 7 个参数表示当前缓存被清除时的回调函数。
我们再说第 4、5 参数
第 4 个参数表示绝对的过期时间,absoluteExpiration DateTime。
第 5 个参数表示最后一次读取缓存多久后过期,slidingExpiration TimeSpan。比如:TimeSpan.FromMinutes(20)。
这 2 个参数不能同时设置有效值:
如果使用了 absoluteExpiration,应将 slidingExpiration 设置为:Cache.NoSlidingExpiration。
如果使用了 slidingExpiration,应将 absoluteExpiration 设置为:Cache.NoAbsoluteExpiration。
否则报错:absoluteExpiration 必须为 DateTime.MaxValue 或 slidingExpiration 必须为 timeSpan.Zero。说实话,我是觉得这报错提示太误导人了。
第 6 个参数
第 6 个参数 priority 表示优先级,优先级有什么用呢?当 IIS 认为有必要清理缓存时(哪怕缓存时间没到),它最先清理那些低优先级的。
通常设置为 CacheItemPriority.Normal 即可。
应用示例
cache.Add("addkey", DateTime.Now, null, DateTime.Now.AddMinutes(2), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null); cache.Add("addkey", "itpow", null, DateTime.Now.AddMinutes(2), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
看明白了几个参数,用起来倒是挺简单的。
网上有人说 Add 遇到重名的 key 会出错,Insert 则不出错。这种说法是错误的。正确的是:Add、Insert 遇到重名的 key 时,都不会出错,如上代码就不会出错。