Web.Cache管理类源码

using System; 
using System.Collections; 
using System.Web; 
using System.Web.Caching; 
namespace Core 

    public sealed class CacheManager 
    { 
        #region 私有字段 
        private const string _DefaultPrefix = "CMS.Default"; 
        private string _Prefix; 
        #endregion 
        #region 构造函数 
        /// <summary> 
        /// 初始化缓存管理器对象。 
        /// </summary> 
        internal CacheManager() 
        { 
            _Prefix = _DefaultPrefix; 
        } 
        #endregion 
        #region 私有方法 
        /// <summary> 
        /// 检查给定的缓存键是否合法,如果不合法则直接修正它。 
        /// </summary> 
        /// <param name="key">要检查的缓存键。</param> 
        /// <returns>经过检查并修正的缓存键。</returns> 
        private string _CheckCacheKey(string key) 
        { 
            if (key.StartsWith(_Prefix + "-") == false) 
                key = String.Format("{0}-{1}", _Prefix, key); 
            return key; 
        } 
        #endregion 
        #region 公有方法 
        #region 添加缓存 
        /// <summary> 
        /// 添加一个缓存对象。 
        /// </summary> 
        /// <param name="key">用于引用该项的缓存键。</param> 
        /// <param name="value">要插入缓存中的对象。</param> 
        public void Add(string key, object value) 
        { 
            this.Add(key, value); 
        } 
        /// <summary> 
        /// 添加一个缓存对象。 
        /// </summary> 
        /// <param name="key">用于引用该项的缓存键。</param> 
        /// <param name="value">要插入缓存中的对象。</param> 
        /// <param name="absoluteExpiration">所插入对象将过期并被从缓存中移除的时间。</param> 
        public void Add(string key, object value, TimeSpan absoluteExpiration) 
        { 
            this.Add(key, value, DateTime.Now.Add(absoluteExpiration), TimeSpan.Zero); 
        } 
        /// <summary> 
        /// 添加一个缓存对象。 
        /// </summary> 
        /// <param name="key">用于引用该项的缓存键。</param> 
        /// <param name="value">要插入缓存中的对象。</param> 
        /// <param name="dependencies">所插入对象的文件依赖项或缓存键依赖项。当任何依赖项更改时,该对象即无效,并从缓存中移除。如果没有依赖项,则此参数包含 null。</param> 
        /// <param name="absoluteExpiration">所插入对象将过期并被从缓存中移除的时间。</param> 
        public void Add(string key, object value, CacheDependency dependencies, TimeSpan absoluteExpiration) 
        { 
            this.Add(key, value, dependencies, DateTime.Now.Add(absoluteExpiration), TimeSpan.Zero); 
        } 
        /// <summary> 
        /// 添加一个缓存对象。 
        /// </summary> 
        /// <param name="key">用于引用该项的缓存键。</param> 
        /// <param name="value">要插入缓存中的对象。</param> 
        /// <param name="absoluteExpiration">所插入对象将过期并被从缓存中移除的时间。如果使用绝对过期,则 slidingExpiration 参数必须为 System.Web.Caching.Cache.NoSlidingExpiration。</param> 
        /// <param name="slidingExpiration">最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除。如果使用可调过期,则absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。</param> 
        public void Add(string key, object value, DateTime absoluteExpiration, TimeSpan slidingExpiration) 
        { 
            this.Add(key, value, null, absoluteExpiration, slidingExpiration); 
        } 
        /// <summary> 
        /// 添加一个缓存对象。 
        /// </summary> 
        /// <param name="key">用于引用该项的缓存键。</param> 
        /// <param name="value">要插入缓存中的对象。</param> 
        /// <param name="dependencies">所插入对象的文件依赖项或缓存键依赖项。当任何依赖项更改时,该对象即无效,并从缓存中移除。如果没有依赖项,则此参数包含 null。</param> 
        /// <param name="absoluteExpiration">所插入对象将过期并被从缓存中移除的时间。如果使用绝对过期,则 slidingExpiration 参数必须为 System.Web.Caching.Cache.NoSlidingExpiration。</param> 
        /// <param name="slidingExpiration">最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除。如果使用可调过期,则absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。</param> 
        public void Add(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration) 
        { 
            this.Add(key, value, dependencies, absoluteExpiration, slidingExpiration, CacheItemPriority.Default, null); 
        } 
        /// <summary> 
        /// 添加一个缓存对象。 
        /// </summary> 
        /// <param name="key">用于引用该项的缓存键。</param> 
        /// <param name="value">要插入缓存中的对象。</param> 
        /// <param name="absoluteExpiration">所插入对象将过期并被从缓存中移除的时间。如果使用绝对过期,则 slidingExpiration 参数必须为 System.Web.Caching.Cache.NoSlidingExpiration。</param> 
        /// <param name="slidingExpiration"> 最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除。如果使用可调过期,则absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。</param> 
        /// <param name="priority">该对象相对于缓存中存储的其他项的成本,由 System.Web.Caching.CacheItemPriority 枚举表示。该值由缓存在退出对象时使用;具有较低成本的对象在具有较高成本的对象之前被从缓存移除。</param> 
        /// <param name="onRemoveCallback">在从缓存中移除对象时将调用的委托(如果提供)。当从缓存中删除应用程序的对象时,可使用它来通知应用程序。</param> 
        public void Add(string key, object value, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback) 
        { 
            this.Add(key, value, null, absoluteExpiration, slidingExpiration, priority, onRemoveCallback); 
        } 
        /// <summary> 
        /// 添加一个缓存对象。 
        /// </summary> 
        /// <param name="key">用于引用该项的缓存键。</param> 
        /// <param name="value">要插入缓存中的对象。</param> 
        /// <param name="dependencies">所插入对象的文件依赖项或缓存键依赖项。当任何依赖项更改时,该对象即无效,并从缓存中移除。如果没有依赖项,则此参数包含 null。</param> 
        /// <param name="absoluteExpiration">所插入对象将过期并被从缓存中移除的时间。如果使用绝对过期,则 slidingExpiration 参数必须为 System.Web.Caching.Cache.NoSlidingExpiration。</param> 
        /// <param name="slidingExpiration"> 最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除。如果使用可调过期,则absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。</param> 
        /// <param name="priority">该对象相对于缓存中存储的其他项的成本,由 System.Web.Caching.CacheItemPriority 枚举表示。该值由缓存在退出对象时使用;具有较低成本的对象在具有较高成本的对象之前被从缓存移除。</param> 
        /// <param name="onRemoveCallback">在从缓存中移除对象时将调用的委托(如果提供)。当从缓存中删除应用程序的对象时,可使用它来通知应用程序。</param> 
        public void Add(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback) 
        { 
            HttpContext.Current.Cache.Insert(_CheckCacheKey(key), value, dependencies, absoluteExpiration, slidingExpiration, priority, onRemoveCallback); 
        } 
        #endregion 
        #region 删除缓存 
        /// <summary> 
        /// 从 Cache 移除指定项。 
        /// </summary> 
        /// <param name="key">要移除的缓存项的 System.String 标识符。</param> 
        /// <returns>从 CacheStrategy.Cache 移除的项。如果未找到键参数中的值,则返回null。</returns> 
        public object Remove(string key) 
        { 
            return HttpContext.Current.Cache.Remove(_CheckCacheKey(key)); 
        } 
        #endregion 
        #region 获取缓存数目 
        /// <summary> 
        /// 根据键名前缀返回缓存项数。注意该方法返回的是仅仅以 prefix 为前缀的缓存项目的总数。 
        /// </summary> 
        /// <param name="prefix">指定的缓存键名前缀。</param> 
        /// <returns>以 prefix 为前缀的缓存项目的总数。</returns> 
        public int GetCountByPrefix(string prefix) 
        { 
            int i = 0; 
            IDictionaryEnumerator E = HttpContext.Current.Cache.GetEnumerator(); 
            while (E.MoveNext()) 
            { 
                if (E.Key.ToString().StartsWith(prefix) == true) 
                    i++; 
            } 
            return i; 
        } 
        #endregion 
        #region 判断缓存是否已经存在 
        /// <summary> 
        /// 判断给定的键是否已经拥有缓存项。 
        /// </summary> 
        /// <param name="key">用于引用该项的缓存键。</param> 
        /// <returns>返回 true 表示已经存在缓存项。</returns> 
        public bool Contains(string key) 
        { 
            return this.Get(key) != null; 
        } 
        #endregion 
        #region 读取缓存 
        /// <summary> 
        /// 从 Cache 对象检索指定项。 
        /// </summary> 
        /// <param name="key">要检索的缓存项的标识符。</param> 
        /// <returns>检索到的缓存项,未找到该键时为null。</returns> 
        public object Get(string key) 
        { 
            return HttpContext.Current.Cache.Get(_CheckCacheKey(key)); 
        } 
        #endregion 
        #region 删除所有缓存 
        /// <summary> 
        /// 重置缓存管理器,这将清空所有已缓存的项。 
        /// </summary> 
        public void Reset() 
        { 
            IDictionaryEnumerator E = HttpContext.Current.Cache.GetEnumerator(); 
            while (E.MoveNext()) 
            { 
                HttpContext.Current.Cache.Remove(_CheckCacheKey((string)E.Key)); 
            } 
        } 
        #endregion 
        #endregion 
        #region 公有属性 
        /// <summary> 
        /// 获取当前缓存项数。 
        /// </summary> 
        public int Count { get { return HttpContext.Current.Cache.Count; } } 
        /// <summary> 
        /// 设置或获取缓存键名前缀。 
        /// </summary> 
        public string Prefix 
        { 
            get
            { 
                if (String.IsNullOrEmpty(_Prefix)) 
                    _Prefix = _DefaultPrefix; 
                return _Prefix; 
            } 
            set { _Prefix = value; } 
        } 
        /// <summary> 
        /// 设置或获取指定键处的缓存项。 
        /// </summary> 
        /// <param name="key">表示缓存项的键的 System.String 对象。</param> 
        /// <returns>指定的缓存项。</returns> 
        public object this[string key] 
        { 
            get { return HttpContext.Current.Cache.Get(_CheckCacheKey(key)); } 
            set { HttpContext.Current.Cache.Insert(_CheckCacheKey(key), value); } 
        } 
        /// <summary> 
        /// 获取在 ASP.NET 开始从缓存中移除项之前应用程序可使用的物理内存百分比。 
        /// </summary> 
        public long EffectivePercentagePhysicalMemoryLimit { get { return HttpContext.Current.Cache.EffectivePercentagePhysicalMemoryLimit; } } 
        /// <summary> 
        /// 获取可用于缓存的字节数。 
        /// </summary> 
        public long EffectivePrivateBytesLimit { get { return HttpContext.Current.Cache.EffectivePrivateBytesLimit; } } 
        #endregion 
    } 
}

你可能感兴趣的:(cache)