DTcms-【缓存】-CacheHelper缓存URL重写配置表

1.分析下面这段代码

CacheHelper.Insert(DTKeys.CACHE_SITE_URLS, dal.GetList(), Utils.GetXmlMapPath(DTKeys.FILE_URL_XML_CONFING));

参数:唯一的键值;Hashtable类型的列表;文件依赖的路径【当这个文件变化的时候缓存将会失效】

2.在BLL层是这样调用的

        /// <summary>
        /// 返回URL映射列表
        /// </summary>
        public Hashtable GetList()
        {
            //先从缓存中读取,如果没有读取成功就插入对象然后再读取。
            //那么缓存多长时间呢?
            //当任何依赖项更改时,该对象即无效,并从缓存中移除,这个地方就是当文件变动时,缓存将会失效
            Hashtable ht = CacheHelper.Get<Hashtable>(DTKeys.CACHE_SITE_URLS);
            if (ht == null)
            {
                
                CacheHelper.Insert(DTKeys.CACHE_SITE_URLS, dal.GetList(), Utils.GetXmlMapPath(DTKeys.FILE_URL_XML_CONFING));
                ht = CacheHelper.Get<Hashtable>(DTKeys.CACHE_SITE_URLS);
            }
            return ht;
        }

3.我们看看 CacheHelper 是怎么设计的?
代码在DTcms.Common 层里面,设计比较简单
4个函数:两个插入的,两个获取的;
1.Insert--创建对一个文件的依赖项,当文件变化时,缓存将会失效
2.Insert--指定缓存的时间,以单位分钟计时
3.这个缓存功能被用在以下几个地方:
1.对URL重写表的缓存配置;
2.对远程字符串的缓存配置
3.对系统配置sysconfig配置的缓存使用
4.本质就是System.Web.Caching.Cache这个系统的缓存类在起作用

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.Caching;

namespace DTcms.Common
{
    public class CacheHelper
    {
        /// <summary>
        /// 创建缓存项的文件依赖
        /// </summary>
        /// <param name="key">缓存Key</param>
        /// <param name="obj">object对象</param>
        /// <param name="fileName">文件绝对路径</param>
        public static void Insert(string key, object obj, string fileName)
        {
            //创建缓存依赖项 对一个文件的依赖项
            CacheDependency dep = new CacheDependency(fileName);
            //创建缓存
            HttpContext.Current.Cache.Insert(key, obj, dep);
        }

        /// <summary>
        /// 创建缓存项过期
        /// </summary>
        /// <param name="key">缓存Key</param>
        /// <param name="obj">object对象</param>
        /// <param name="expires">过期时间(分钟)</param>
        public static void Insert(string key, object obj, int expires)
        {
            HttpContext.Current.Cache.Insert(key, obj, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, expires, 0));
        }

        /// <summary>
        /// 获取缓存对象
        /// </summary>
        /// <param name="key">缓存Key</param>
        /// <returns>object对象</returns>
        public static object Get(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                return null;
            }
            return HttpContext.Current.Cache.Get(key);
        }

        /// <summary>
        /// 获取缓存对象
        /// </summary>
        /// <typeparam name="T">T对象</typeparam>
        /// <param name="key">缓存Key</param>
        /// <returns></returns>
        public static T Get<T>(string key)
        {
            object obj = Get(key);
            return obj == null ? default(T) : (T)obj;
        }

    }
}
发布了102 篇原创文章 · 获赞 3 · 访问量 9178

猜你喜欢

转载自blog.csdn.net/yueyekonglong/article/details/104040859