ASP.NET Cache 缓存使用【二】

    /*
                 * 1. 永不过期。直接赋值缓存的Key和Value即可.
                 * 2. 绝对时间过期
                        DateTimeOffset.Now.AddMinutes(3) 表示缓存在3分钟后过期, TimeSpan.Zero 表示不使用平滑过期策略.
                 *      AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(3), //3分钟后过期
                        SlidingExpiration = TimeSpan.Zero, //不使用平滑过期策略
                 * 
                 * 3. 变化时间过期(平滑过期)
                        TimeSpan.FromMinutes(3) 表示缓存连续3分钟没有被访问就过期, DateTime.MaxValue表示不使用绝对时间过期策略.
                 *      AbsoluteExpiration = DateTimeOffset.MaxValue, //不使用绝对过期策略
                        SlidingExpiration = TimeSpan.FromMinutes(3), //3分钟内如果没有访问则自动过期
                 * 
                 * 在这里,我们都使用了Insert()方法来添加缓存。其实,Cache还有一个Add()方法也能向缓存中添加项。
                    不同之处在于Add()方法只能添加缓存中没有的项
                    如果添加缓存中已有的项将失败(但不会抛出异常),而Insert()方法能覆盖原来的项。
                    注意:和Application不同,这里不需要使用在插入ASP.NET缓存的时候进行锁操作,Cache会自己处理并发
                 */

ASP.NET支持二种缓存项的过期策略:绝对过期和滑动过期。
1. 绝对过期,这个容易理解:就是在缓存放入Cache时,指定一个具体的时间。当时间到达指定的时间的时,缓存项自动从Cache中移除。
2. 滑动过期:某些缓存项,我们可能只希望在有用户在访问时,就尽量保留在缓存中,只有当一段时间内用户不再访问该缓存项时,才移除它, 这样可以优化内存的使用,因为这种策略可以保证缓存的内容都是【很热门】的。 操作系统的内存以及磁盘的缓存不都是这样设计的吗?而这一非常有用的特性,Cache也为我们准备好了,只要在将缓存项放入缓存时, 指定一个滑动过期时间就可以实现了。

以上二个选项分别对应Add, Insert方法中的DateTime absoluteExpiration, TimeSpan slidingExpiration这二个参数。
注意:这二个参数都是成对使用的,但不能同时指定它们为一个【有效】值,最多只能一个参数值有效。 当不使用另一个参数项时,请用Cache类定义二个static readonly字段赋值。

这二个参数比较简单,我就不多说了,只说一句:如果都使用Noxxxxx这二个选项,那么缓存项就一直保存在缓存中。(或许也会被移除) 

        /// <summary>
        /// Remove all items of cache
        /// </summary>
        public void Clear()
        {
            var mCacheKeys = cache.Select(m => m.Key).ToList();
            foreach (var mKey in mCacheKeys)
            {
                cache.Remove(mKey);
            }
        }

        /// <summary>
        /// Remove items by pattern of cache
        /// </summary>
        /// <param name="pattern">pattern</param>
        public void RemoveByPattern(string pattern)
        {
            var mCacheKeys = cache.Select(m => m.Key).ToList();
            Regex regex = new Regex(pattern, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);
            foreach (var mKey in mCacheKeys)
            {
                if (regex.IsMatch(mKey.Trim()))
                {
                    cache.Remove(mKey.Trim());
                }
            }
        }

 

 

转载于:https://www.cnblogs.com/xust/articles/2856209.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值