⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aspnetcacheprovider.cs

📁 HeyCacher 高性能缓存方案(带源码) 1. 文件的所有权益归上传用户所有 2. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途 3. CSDN下载频道仅提供交流平台
💻 CS
字号:
//===============================================================================
// CSDN HeyCache 
//===============================================================================
// 修改记录:[按最后修改时间倒排序]
// modify: 2007.06.14 by tangwei 
// create: 2007.06.11 by tangwei
//
// 代码来源:tangwei
//===============================================================================
using System;
using System.Collections.Generic;
using System.Text;
using HeyCacher.Components.Expirations;
using HeyCacher.Components;

namespace HeyCacher.Providers
{
    /// <summary>
    /// 封装Aspnet的缓存实现
    /// </summary>
    public class AspnetCacheProvider : CacheProvider
    {
        System.Web.Caching.Cache cacheManage;

        public AspnetCacheProvider()
        {
            cacheManage = System.Web.HttpRuntime.Cache;
        }

        public override int Count
        {
            get
            {
                return cacheManage.Count;
            }
        }

        public override bool Contains(string Key, CacheTack cacheTack)
        {
            return cacheManage[Key]!=null;
        }

        public override CacheItem GetCacheItem(string Key, CacheTack cacheTack)
        {
            return (CacheItem)cacheManage.Get(Key);
        }

        protected override object innerInsert(bool Replace, CacheItem ci, CacheTack cacheTack, out bool Insertd)
        {
            Insertd = false; //是否被插入

            //检查缓存项是否有了,有了的话,根据Replace进行删除或者返回
            if (Contains(ci.Key))
            {
                if (Replace)
                {
                    Remove(ci.Key);
                }
                else
                {
                    return GetCacheItem(ci.Key, null).realValue;
                }
            }

            //转换
            System.Web.Caching.CacheDependency a_CacheDependency = null;
            DateTime a_AbsoluteExpiration = System.Web.Caching.Cache.NoAbsoluteExpiration;
            TimeSpan a_SlidingExpiration = System.Web.Caching.Cache.NoSlidingExpiration;
            for (int i = 0; i < ci.Expirations.Length; i++)
            {
                if (ci.Expirations[i] == null)
                {
                    continue;
                }
                if (ci.Expirations[i] is Components.Expirations.AbsoluteTime)
                {
                    a_AbsoluteExpiration = ((Components.Expirations.AbsoluteTime)ci.Expirations[i]).AbsoluteExpirationTime;
                    continue;
                }
                if (ci.Expirations[i] is Components.Expirations.SlidingTime)
                {
                    a_SlidingExpiration = ((Components.Expirations.SlidingTime)ci.Expirations[i]).ItemSlidingExpiration;
                    continue;
                }
                if (ci.Expirations[i] is Components.Expirations.FileDependency)
                {
                    a_CacheDependency = new System.Web.Caching.CacheDependency(((Components.Expirations.FileDependency)ci.Expirations[i]).FileName);
                    continue;
                }
            }
            System.Web.Caching.CacheItemPriority a_Priority = ConvertPriority(ci.Priority);
            System.Web.Caching.CacheItemRemovedCallback a_RefreshAction = null;

            cacheManage.Insert(ci.Key, ci, a_CacheDependency, a_AbsoluteExpiration, a_SlidingExpiration, a_Priority, a_RefreshAction);

            Insertd = true;

            //判断返回
            return ci.realValue;
        }

        public override bool Remove(string Key, CacheTack cacheTack, CacheItemRemovedReason removalReason)
        {
            if (cacheManage.Remove(Key) != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override void Flush()
        {
            System.Collections.IDictionaryEnumerator ide = cacheManage.GetEnumerator();
            while (ide.MoveNext())
            {
                System.Web.HttpRuntime.Cache.Remove(ide.Key.ToString());
            }
        }

        internal override System.Collections.IDictionaryEnumerator CreateEnumerator()
        {
            return cacheManage.GetEnumerator();
        }

        /// <summary>
        /// 转换缓存优先级
        /// </summary>
        /// <param name="priority"></param>
        /// <returns></returns>
        private System.Web.Caching.CacheItemPriority ConvertPriority(Components.CacheItemPriority priority)
        {
            System.Web.Caching.CacheItemPriority ResultPriority = System.Web.Caching.CacheItemPriority.Default;
            try
            {
                ResultPriority = (System.Web.Caching.CacheItemPriority)Enum.Parse(typeof(System.Web.Caching.CacheItemPriority), priority.ToString());
            }
            catch { }
            return ResultPriority;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -