首页 > 编程语言 >C# ASP.NET常见4种页面缓存方式

C# ASP.NET常见4种页面缓存方式

时间:2022-09-07 10:58:48浏览次数:90  
标签:缓存 CacheFilePath string C# DataSet ASP NET null DataTable

C# ASP.NET常见4种页面缓存方式

1、 分布式缓存Memcached教程pdf下载

 

2、内存缓存,此暂用服务器资源,没钱买好机机的少用,不用!

#region 内存缓存  
        public class MemoryCache  
        {  
            #region 写  
            /// <summary>  
            /// 向内存写入数据缓存  
            /// </summary>  
            /// <remarks>TOMMYHU2011-7-28 10:25创建</remarks>  
            /// <param name="cachekey">缓存标识关键字</param>  
            /// <param name="cacheresult">需要存放的数据</param>  
            /// <param name="cachetime">单位秒</param>  
            public static void InertMemoryCache(string cachekey, object cacheresult, int cachetime)  
            {  
                if (cacheresult != null)  
                {  
                    System.Web.HttpRuntime.Cache.Insert(cachekey, cacheresult, null  
                        , System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(cachetime));  
                }  
            }  
            #endregion  
            #region 读  
            /// <summary>  
            /// 根据缓存标识读取内存缓存信息  
            /// </summary>  
            /// <remarks>TOMMYHU2011-7-28 10:25创建</remarks>  
            /// <param name="cachekey">缓存标识关键字</param>  
            /// <returns>内存缓存数据</returns>  
            public static object ReadMemoryCache(string cachekey)  
            {  
                object obj = System.Web.HttpRuntime.Cache.Get(cachekey);  
                if (obj != null)  
                {  
                    return obj;  
                }  
                return null;  
            }  
            #endregion  
        }   
        #endregion  

 

3、XML缓存,这种最为常见

        #region xml缓存  
        public static class XmlCache  
        {  
            private static string m_CacheFolderName = null;  
  
            #region 获取/生成缓存文件方法(无cmdParams)  
            /// <summary>  
            /// 获取/生成缓存文件方法(DataTable)  
            /// </summary>  
            /// <param name="SQL">用于将Sql转化为MD5字符串</param>  
            /// <param name="CacheFilePath">存放Xml文件的相对路径(根目录已预置)</param>  
            /// <param name="CacheTime">缓存时间</param>  
            /// <param name="DataUsed">使用的数据库的链接字符串</param>  
            /// <returns></returns>  
            public static DataTable CacheFileByDataTable(string SQL, string CacheFilePath, int CacheTime)  
            {  
                SQLHelper.SQLHelper QuerySql = new SQLHelper.SQLHelper();  
                if (CacheFilePath != string.Empty && CacheFilePath.StartsWith("/"))  
                {  
                    CacheFilePath = CacheFilePath.Remove(0, 1);  
                }  
  
                string SqlMd5 = SQL;//用于将Sql转化为MD5字符串  
  
                string StrSqlByMd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(SqlMd5, "MD5");//生成的Md5文件名  
  
                string MyCacheFilePath = "";  
  
                if (CacheTime >= 10000)//如果大于20天的话系统默认为持久  
                {  
                    MyCacheFilePath = XmlCache.CacheFolderNameP + CacheFilePath;//用于存放Xml文件的相对路径  
                }  
                else  
                {  
                    MyCacheFilePath = XmlCache.CacheFolderName + CacheFilePath;//用于存放Xml文件的相对路径  
                }  
  
  
                int MyCacheTime = CacheTime;//缓存时间(分)  
  
                DataTable dt = new DataTable();//存放数据记录的DataTable  
  
                DataTable CacheDt = new DataTable();//获取缓存数据记录的DataTable  
  
  
                //尝试获取缓存数据记录  
                try  
                {  
                    CacheDt = DataTableCache.GetDTCache(MyCacheTime, MyCacheFilePath, StrSqlByMd5);  
                }  
                catch  
                {  
                    CacheDt = null;  
                }  
                if (CacheDt != null)//获取到缓存的XML文件  
                {  
                    dt = CacheDt;  
                }  
                else//未获取到缓存的XML文件  
                {  
                    //生成DataTable(如果用Query查询请用Query.ProcessSql方法)  
                    //dt = Query.ProcessSql(SqlMd5, DataUsed);  
                    dt = QuerySql.retDT(SQL);  
  
                    //将DataTable存为XML文件  
                    try  
                    {  
                        if (dt.DataSet != null)  
                        {  
                            dt.DataSet.Tables.Remove(dt);  
                        }  
  
                        DataTableCache.SetDTCache(MyCacheFilePath, StrSqlByMd5, dt);  
                    }  
                    catch (Exception ex)  
                    {  
                        //Log.GetComLogger().Error("将DataTable存为XML文件出错:" + ex.Message);  
                    }  
                }  
                return dt;  
            }  
  
            /// <summary>  
            /// 获取/生成缓存文件方法(DataSet) Add By WJ 08-10-23  
            /// </summary>  
            /// <param name="SQL">用于将Sql转化为MD5字符串</param>  
            /// <param name="CacheFilePath">存放Xml文件的相对路径(根目录已预置)</param>  
            /// <param name="CacheTime">缓存时间</param>  
            /// <param name="DBName">使用的数据库的链接字符串</param>  
            /// <returns></returns>  
            public static DataSet CacheFileByDataSet(string SQL, string CacheFilePath, int CacheTime)  
            {  
                SQLHelper.SQLHelper QuerySql = new SQLHelper.SQLHelper();  
                if (CacheFilePath != string.Empty && CacheFilePath.StartsWith("/"))  
                {  
                    CacheFilePath = CacheFilePath.Remove(0, 1);  
                }  
  
                string SqlMd5 = SQL;//用于将Sql转化为MD5字符串  
  
                string StrSqlByMd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(SqlMd5, "MD5");//生成的Md5文件名  
  
                string MyCacheFilePath = XmlCache.CacheFolderName + CacheFilePath;//用于存放Xml文件的相对路径  
  
                int MyCacheTime = CacheTime;//缓存时间(分)  
  
                DataSet ds = new DataSet();//存放数据记录的DataSet  
  
                DataSet CacheDs = new DataSet();//获取缓存数据记录的DataSet  
  
                //尝试获取缓存数据记录  
                try  
                {  
                    CacheDs = DataTableCache.GetDSCache(MyCacheTime, MyCacheFilePath, StrSqlByMd5);  
                }  
                catch  
                {  
                    CacheDs = null;  
                }  
                if (CacheDs != null)//获取到缓存的XML文件  
                {  
                    ds = CacheDs;  
                }  
                else//未获取到缓存的XML文件  
                {  
                    //生成DataSet  
                    //ds = Query.ProcessMultiSql(SqlMd5, DBName);  
                    ds = QuerySql.retDS(SQL);  
  
                    //将DataSet存为XML文件  
                    try  
                    {  
                        DataTableCache.SetDSCache(MyCacheFilePath, StrSqlByMd5, ds);  
                    }  
                    catch  
                    { }  
                }  
                return ds;  
            }  
  
            #endregion  
  
            #region 获取/生成缓存文件方法(有cmdParams)  
            /// <summary>  
            /// 获取/生成缓存文件方法(DataTable)  
            /// </summary>  
            /// <param name="SQL">用于将Sql转化为MD5字符串</param>  
            /// <param name="CacheFilePath">存放Xml文件的相对路径(根目录已预置)</param>  
            /// <param name="CacheTime">缓存时间</param>  
            /// <param name="DataUsed">使用的数据库的链接字符串</param>  
            /// <param name="cmdParams">以数组形式提供SqlCommand命令中用到的参数列表</param>  
            /// <returns></returns>  
            public static DataTable CacheFileByDataTable(string SQL, string CacheFilePath, int CacheTime, string DBConstr, params SqlParameter[] cmdParams)  
            {  
                SQLHelper.SQLHelper QuerySql = new SQLHelper.SQLHelper();  
                if (CacheFilePath != string.Empty && CacheFilePath.StartsWith("/"))  
                {  
                    CacheFilePath = CacheFilePath.Remove(0, 1);  
                }  
  
                string SqlMd5 = SQL;//用于将Sql转化为MD5字符串  
  
                string sqlmd5params = SQL;  
                if (cmdParams != null)  
                {  
                    for (int i = 0; i < cmdParams.Length; i++)  
                    {  
                        if (cmdParams[i].Value != null)  
                            sqlmd5params += cmdParams[i].Value.ToString();  
                    }  
                }  
  
                string StrSqlByMd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sqlmd5params, "MD5");//生成的Md5文件名  
  
                string MyCacheFilePath = "";  
  
                if (CacheTime >= 10000)//如果大于20天的话系统默认为持久  
                {  
                    MyCacheFilePath = XmlCache.CacheFolderNameP + CacheFilePath;//用于存放Xml文件的相对路径  
                }  
                else  
                {  
                    MyCacheFilePath = XmlCache.CacheFolderName + CacheFilePath;//用于存放Xml文件的相对路径  
                }  
  
                int MyCacheTime = CacheTime;//缓存时间(分)  
  
                DataTable dt = new DataTable();//存放数据记录的DataTable  
  
                DataTable CacheDt = new DataTable();//获取缓存数据记录的DataTable  
  
  
                //尝试获取缓存数据记录  
                CacheDt = DataTableCache.GetDTCache(MyCacheTime, MyCacheFilePath, StrSqlByMd5);  
  
                if (CacheDt != null)//获取到缓存的XML文件  
                {  
                    dt = CacheDt;  
                }  
                else//未获取到缓存的XML文件  
                {  
                    //生成DataTable(如果用Query查询请用Query.ProcessSql方法)  
                    //dt = Query.ProcessSql(SqlMd5, DataUsed);  
                    dt = QuerySql.retDT(SqlMd5);  
                    DataTable dt1 = new DataTable();  
                    if (dt != null)  
                    {  
                        dt1 = dt.Copy();  
                    }  
                    //将DataTable存为XML文件  
                    DataTableCache.SetDTCache(MyCacheFilePath, StrSqlByMd5, dt1);  
                }  
                return dt;  
            }  
  
  
            /// <summary>  
            /// 获取/生成缓存文件方法(DataSet) Add By wjf  
            /// </summary>  
            /// <param name="SQL">用于将Sql转化为MD5字符串</param>  
            /// <param name="CacheFilePath">存放Xml文件的相对路径(根目录已预置)</param>  
            /// <param name="CacheTime">缓存时间</param>  
            /// <param name="DBName">使用的数据库的链接字符串</param>  
            /// <param name="cmdParams">以数组形式提供SqlCommand命令中用到的参数列表</param>  
            /// <returns></returns>  
            public static DataSet CacheFileByDataSet(string SQL, string CacheFilePath, int CacheTime, string DBConstr, params SqlParameter[] cmdParams)  
            {  
                SQLHelper.SQLHelper QuerySql = new SQLHelper.SQLHelper();  
                string SqlMd5 = SQL;//用于将Sql转化为MD5字符串  
  
                string sqlmd5params = SQL;  
                if (cmdParams != null)  
                {  
                    for (int i = 0; i < cmdParams.Length; i++)  
                    {  
                        if (cmdParams[i].Value != null)  
                            sqlmd5params += cmdParams[i].Value.ToString();  
                    }  
                }  
  
                string StrSqlByMd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sqlmd5params, "MD5");//生成的Md5文件名  
  
                string MyCacheFilePath = XmlCache.CacheFolderName + CacheFilePath;//用于存放Xml文件的相对路径  
  
                int MyCacheTime = CacheTime;//缓存时间(分)  
  
                DataSet ds = new DataSet();//存放数据记录的DataSet  
  
                DataSet CacheDs = new DataSet();//获取缓存数据记录的DataSet  
  
                //尝试获取缓存数据记录  
                CacheDs = DataTableCache.GetDSCache(MyCacheTime, MyCacheFilePath, StrSqlByMd5);  
  
                if (CacheDs != null)//获取到缓存的XML文件  
                {  
                    ds = CacheDs;  
                }  
                else//未获取到缓存的XML文件  
                {  
                    //生成DataSet  
                    //ds = Query.ProcessMultiSql(SqlMd5, DBName);  
                    ds = QuerySql.retDS(SqlMd5);  
                    DataSet ds1 = new DataSet();  
                    if (ds != null)  
                    {  
                        ds1 = ds.Copy();  
                    }  
                    //将DataSet存为XML文件  
                    DataTableCache.SetDSCache(MyCacheFilePath, StrSqlByMd5, ds1);  
                }  
                return ds;  
            }  
            #endregion  
  
            #region 非持久保持  
            /// <summary>  
            /// 非持久保持  
            /// </summary>  
            public static string CacheFolderName  
            {  
                get  
                {  
                    if (m_CacheFolderName == null)//如果Global.asax中未定义路径  
                    {  
                        m_CacheFolderName = System.Configuration.ConfigurationManager.AppSettings.GetValues("CachePathRoot")[0];  
                        if (m_CacheFolderName == null)//如果Web.Config中未定义路径  
                        {  
                            return "/CacheData/" + DateTime.Now.ToString("yyyyMMdd") + "/";  
                        }  
                        else  
                        {  
                            return m_CacheFolderName  + DateTime.Now.ToString("yyyyMMdd") + "/";  
                        }  
                    }  
                    else  
                    {  
                        return m_CacheFolderName  + DateTime.Now.ToString("yyyyMMdd") + "/";  
                    }  
                }  
  
                set  
                {  
                    m_CacheFolderName = value;  
                }  
            }  
            #endregion  
  
            #region 持久保存(例如存放MapBar缓存的数据或需要3个月以上更新的数据等)  
            /// <summary>  
            /// 持久保存(例如存放MapBar缓存的数据或需要3个月以上更新的数据等)  
            /// </summary>  
            public static string CacheFolderNameP  
            {  
                get  
                {  
                    if (m_CacheFolderName == null)//如果Global.asax中未定义路径  
                    {  
                        m_CacheFolderName = System.Configuration.ConfigurationManager.AppSettings.GetValues("CachePathRoot")[0];  
                        if (m_CacheFolderName == null)//如果Web.Config中未定义路径  
                        {  
                            return "/CacheData/";  
                        }  
                        else  
                        {  
                            return m_CacheFolderName;  
                        }  
                    }  
                    else  
                    {  
                        return m_CacheFolderName;  
                    }  
                }  
  
                set  
                {  
                    m_CacheFolderName = value;  
                }  
            }  
            #endregion  
        }  
        #endregion  

 

4、DATATABLE缓存

5.Redis缓存

 

标签:缓存,CacheFilePath,string,C#,DataSet,ASP,NET,null,DataTable
From: https://www.cnblogs.com/guanshan/p/guan2022-9-7_001.html

相关文章

  • cronTrigger 与 cron表达式星期有差异
    昨天写完定时任务 今天一测  不行阿 这个周有问题 月和日都正常跑到数据库一看cron表达式没问题阿那就是后台解析有问题了 后台解析用的是cronTriggerC......
  • vue3源码学习6-计算属性computed
    packages/reactivity/src/computed.tsexportfunctioncomputed<T>(getterOrOptions:ComputedGetter<T>|WritableComputedOptions<T>,debugOptions?:DebuggerOp......
  • CF1715E Long Way Home 题解
    CF1715E题解题意一个带边权无向图,可以沿着边走,需要边权的花费或从任意点\(u\)飞到\(v\),需要\((u-v)^2\)的花费。求从点\(1\)到所有\(i\)的最少花费。最多飞\(......
  • arc143
    \(\textbf{B.}\)发现一个符合条件的矩阵\(a\)当且仅当\(\forall(i,j)\),"\(a_{i,j}\)是\(a_{i,k}\)中的最大值"和"\(a_{i,j}\)是\(a_{k,j}\)中的最小值"不同时......
  • ElasticSearch进阶:各种ES查询在Java中的实现
    注:本文摘自:https://mp.weixin.qq.com/s/7vEy-vN8JV3o6sAh6HFohA   本文基于elasticsearch7.13.2版本,es从7.0以后,发生了很大的更新。7.3以后,已经不推荐使用Transpo......
  • 使用 Codex AI 逐步创建 Wordle
    使用CodexAI逐步创建Wordle我转录了使用自然语言创建工作单词的说明TL;DR:如何在不编程的情况下创建Wordle几个月前,我观看了一段关于使用AI创建Wordle的视频......
  • Centos系统安装
     准备工作从国内镜像下载CentOS-7-x86_64-DVD-1810.iso,约4.27GB。下载_UniversalUSBInstaller_,用于制作USB安装盘,约1.7MB。打开连接单击如下按键下载。准备......
  • Centos更改镜像源
     1)备份原有镜像源文件mv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.bak 2)下载阿里云镜像源文件curl-o/etc/yum.repos......
  • 【数据库】Oracle建表、创建序列、添加触发器生成自增主键
    CREATETABLE"TEST"."T_ORDER"(  "AUUID_0"VARCHAR2(255)NOTNULLENABLE,  "Order_ID"VARCHAR2(255)NOTNULLENABLE,  "User_ID"VARCHAR2(25......
  • Docker 入门指南
    Docker入门指南目录基础概念安装教程基本操作常用安装构建操作容器编排壹.基础概念什么是Docker?Docker是基于Go开发的应用容器引擎,属于Linux容器的一种封......