asp.net 数据缓存System.Web.Caching.Cache 实例运用

本文详细介绍了 ASP.NET 应用程序中的缓存管理机制,包括如何获取、设置及删除缓存项,并展示了如何利用绝对过期时间、滑动过期时间以及依赖项来优化缓存的有效性和性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public interface ICache
    {
        /// <summary>
        /// 获取当前应用程序指定CacheKey的Cache值
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <returns></returns>       
        object GetCache(string CacheKey); 

        /// <summary>
        /// 设置当前应用程序指定CacheKey的Cache值
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        void SetCache(string CacheKey, object objObject); 

        /// <summary>
        /// 设置当前应用程序指定CacheKey的Cache值
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration);
        /// <summary>
        /// 依赖缓存
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        /// <param name="dep"></param>
        void SetCache(string CacheKey, object objObject, CacheDependency dep);
        /// <summary>
        /// 清除单一键缓存
        /// </summary>
        /// <param name="key"></param>
        void RemoveOneCache(string CacheKey);
        /// <summary>
        /// 清除所有缓存
        /// </summary>
        void RemoveAllCache();       
        /// <summary>
        /// 以列表形式返回已存在的所有缓存
        /// </summary>
        /// <returns></returns>
        List<string> ShowAllCache();      
    }

 

public class DataCacheDal : ICache
    {
        protected static volatile Cache objCache = HttpRuntime.Cache;
        /// <summary>
        /// 获取当前应用程序指定CacheKey的Cache值
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <returns></returns>
        public object GetCache(string CacheKey)
        {
            return objCache[CacheKey];
        }

        /// <summary>
        /// 设置当前应用程序指定CacheKey的Cache值
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        public void SetCache(string CacheKey, object objObject)
        {
            objCache.Insert(CacheKey, objObject);
        }

        /// <summary>
        /// 设置当前应用程序指定CacheKey的Cache值
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        public void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)
        {
            objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);
        }
        /// <summary>
        /// 设置依赖缓存
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        /// <param name="dep"></param>
        public void SetCache(string CacheKey, object objObject, CacheDependency dep)
        {
            objCache.Insert(
                CacheKey,
                objObject,
                dep,
                Cache.NoAbsoluteExpiration, //从不过期
                Cache.NoSlidingExpiration, //禁用可调过期
                CacheItemPriority.Default,
                null);
        }
        /// <summary>
        /// 清除单一键缓存
        /// </summary>
        /// <param name="key"></param>
        public void RemoveOneCache(string CacheKey)
        {
            objCache.Remove(CacheKey);
        }
        /// <summary>
        /// 清除所有缓存
        /// </summary>
        public void RemoveAllCache()
        {
            IDictionaryEnumerator CacheEnum = objCache.GetEnumerator();
            if (objCache.Count > 0)
            {
                ArrayList al = new ArrayList();
                while (CacheEnum.MoveNext())
                {
                    al.Add(CacheEnum.Key);
                }
                foreach (string key in al)
                {
                    objCache.Remove(key);
                }
            }
        }
        /// <summary>
        /// 以列表形式返回已存在的所有缓存
        /// </summary>
        /// <returns></returns>
        public List<string> ShowAllCache()
        {
            List<string> cachelist = new List<string>();
            if (objCache.Count > 0)
            {
                IDictionaryEnumerator CacheEnum = objCache.GetEnumerator();
                while (CacheEnum.MoveNext())
                {
                    cachelist.Add(CacheEnum.Key.ToString());
                }
            }
            return cachelist;
        }
    }

 

 

public class DataCacheBLL
    {
        //可以更灵活的设置过期时间和方法抽离
        private static readonly ICache icache = null;
        //缓存过期时间  分钟
        private readonly int intcachetime = 30;

        private static object lockHelp = new object();
        private static volatile DataCacheBLL instance = null;

        static DataCacheBLL()
        {
            icache = (ICache)DALFactory.DataFactory.GetFactoryDataCache();
        }

        public static DataCacheBLL Getinstance()
        {
            if (instance == null)
            {
                lock (lockHelp)
                {
                    if (instance == null)
                    {
                        instance = new DataCacheBLL();
                    }
                }
            }
            return instance;
        }
        /// <summary>
        /// 获取当前应用程序指定CacheKey的Cache值
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <returns></returns>
        public object GetCache(string CacheKey)
        {
            return icache.GetCache(CacheKey);
        }

        /// <summary>
        /// 设置当前应用程序指定CacheKey的Cache值
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        public void SetCache(string CacheKey, object objObject)
        {
            icache.SetCache(CacheKey, objObject);
        }

        /// <summary>
        /// 设置当前应用程序指定CacheKey的Cache值
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        public void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)
        {
            icache.SetCache(CacheKey, objObject, absoluteExpiration, slidingExpiration);
        }
        /// <summary>
        /// 绝对过期时间
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        public void SetCacheAbsolute(string CacheKey, object objObject)
        {
            icache.SetCache(CacheKey, objObject, DateTime.Now.AddMinutes(intcachetime), TimeSpan.Zero);
        }
        /// <summary>
        /// 相对过期时间
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        public void SetCacheSliding(string CacheKey, object objObject)
        {
            icache.SetCache(CacheKey, objObject, DateTime.MaxValue, TimeSpan.FromMinutes(intcachetime));
        }
        /// <summary>
        /// 还可以设置文件依赖和数据库依赖
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        /// <param name="dep"></param>
        public void SetCache(string CacheKey, object objObject, CacheDependency dep)
        {
            icache.SetCache(CacheKey, objObject, dep);
        }
        /// <summary>
        /// 清除单一键缓存
        /// </summary>
        /// <param name="key"></param>
        public void RemoveOneCache(string CacheKey)
        {
            icache.RemoveOneCache(CacheKey);
        }
        /// <summary>
        /// 清除所有缓存
        /// </summary>
        public void RemoveAllCache()
        {
            icache.RemoveAllCache();
        }
        /// <summary>
        /// 以列表形式返回已存在的所有缓存
        /// </summary>
        /// <returns></returns>
        public List<string> ShowAllCache()
        {
            return icache.ShowAllCache();
        }

 

 

调用

 DataCacheBLL dcbll = DataCacheBLL.Getinstance();

 public DataSet GetSectionList()
        {
            string CacheKey = "key1";
            DataSet ds = (DataSet)dcbll.GetCache(CacheKey);
            if (ds == null)
            {
                try
                {
                    ds = ipro.GetList();                   
                    if (ds != null)
                    {
                        dcbll.SetCacheAbsolute(CacheKey, ds);
                    }
                }
                catch
                { }
            }
           
            return ds;
        }

 

 

注:特别注意在调用缓存时做日志记录时如果你用的是StreamWriter.AutoFlush = true;设置记录日志,

此时将会对Cache影响丢失,出现每次请求时重新做缓存现象.

 

C#对数据缓存 /// <summary> /// 获取当前应用程序指定CacheKey的Cache值 /// </summary> /// <param name="CacheKey"></param> /// <returns></returns> public static object GetCache(string CacheKey) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; return objCache[CacheKey]; } /// <summary> /// 设置当前应用程序指定CacheKey的Cache值 /// </summary> /// <param name="CacheKey"></param> /// <param name="objObject"></param> public static void SetCache(string CacheKey, object objObject) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; objCache.Insert(CacheKey, objObject); } /// <summary> /// 设置当前应用程序指定CacheKey的Cache值 /// </summary> /// <param name="CacheKey"></param> /// <param name="objObject"></param> public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration); } /// <summary> /// 设置当前应用程序指定CacheKey的Cache值(可不设置绝对过期事件) /// </summary> /// <param name="CacheKey"></param> /// <param name="objObject"></param> /// <param name="slidingExpiration"></param> public static void SetCache(string CacheKey, object objObject, TimeSpan slidingExpiration) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; objCache.Insert(CacheKey, objObject, null, Cache.NoAbsoluteExpiration, slidingExpiration); } public static void RemoveCache(string cacheKey) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; if (objCache[cacheKey] != null) objCache.Remove(cacheKey); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值