ASP.NET页面缓存常见的4种方式
本文为大家分享了4种常见的ASP.NET页面缓存方式,供大家参考,具体内容如下
1、分布式缓存Memcached,教程下载
2、内存缓存,此占用服务器资源
#region内存缓存 publicclassMemoryCache { #region写 ///<summary> ///向内存写入数据缓存 ///</summary> ///<remarks>TOMMYHU2011-7-2810:25创建</remarks> ///<paramname="cachekey">缓存标识关键字</param> ///<paramname="cacheresult">需要存放的数据</param> ///<paramname="cachetime">单位秒</param> publicstaticvoidInertMemoryCache(stringcachekey,objectcacheresult,intcachetime) { 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-2810:25创建</remarks> ///<paramname="cachekey">缓存标识关键字</param> ///<returns>内存缓存数据</returns> publicstaticobjectReadMemoryCache(stringcachekey) { objectobj=System.Web.HttpRuntime.Cache.Get(cachekey); if(obj!=null) { returnobj; } returnnull; } #endregion } #endregion
3、XML缓存,这种最为常见
#regionxml缓存 publicstaticclassXmlCache { privatestaticstringm_CacheFolderName=null; #region获取/生成缓存文件方法(无cmdParams) ///<summary> ///获取/生成缓存文件方法(DataTable) ///</summary> ///<paramname="SQL">用于将Sql转化为MD5字符串</param> ///<paramname="CacheFilePath">存放Xml文件的相对路径(根目录已预置)</param> ///<paramname="CacheTime">缓存时间</param> ///<paramname="DataUsed">使用的数据库的链接字符串</param> ///<returns></returns> publicstaticDataTableCacheFileByDataTable(stringSQL,stringCacheFilePath,intCacheTime) { SQLHelper.SQLHelperQuerySql=newSQLHelper.SQLHelper(); if(CacheFilePath!=string.Empty&&CacheFilePath.StartsWith("/")) { CacheFilePath=CacheFilePath.Remove(0,1); } stringSqlMd5=SQL;//用于将Sql转化为MD5字符串 stringStrSqlByMd5=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(SqlMd5,"MD5");//生成的Md5文件名 stringMyCacheFilePath=""; if(CacheTime>=10000)//如果大于20天的话系统默认为持久 { MyCacheFilePath=XmlCache.CacheFolderNameP+CacheFilePath;//用于存放Xml文件的相对路径 } else { MyCacheFilePath=XmlCache.CacheFolderName+CacheFilePath;//用于存放Xml文件的相对路径 } intMyCacheTime=CacheTime;//缓存时间(分) DataTabledt=newDataTable();//存放数据记录的DataTable DataTableCacheDt=newDataTable();//获取缓存数据记录的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(Exceptionex) { //Log.GetComLogger().Error("将DataTable存为XML文件出错:"+ex.Message); } } returndt; } ///<summary> ///获取/生成缓存文件方法(DataSet)AddByWJ08-10-23 ///</summary> ///<paramname="SQL">用于将Sql转化为MD5字符串</param> ///<paramname="CacheFilePath">存放Xml文件的相对路径(根目录已预置)</param> ///<paramname="CacheTime">缓存时间</param> ///<paramname="DBName">使用的数据库的链接字符串</param> ///<returns></returns> publicstaticDataSetCacheFileByDataSet(stringSQL,stringCacheFilePath,intCacheTime) { SQLHelper.SQLHelperQuerySql=newSQLHelper.SQLHelper(); if(CacheFilePath!=string.Empty&&CacheFilePath.StartsWith("/")) { CacheFilePath=CacheFilePath.Remove(0,1); } stringSqlMd5=SQL;//用于将Sql转化为MD5字符串 stringStrSqlByMd5=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(SqlMd5,"MD5");//生成的Md5文件名 stringMyCacheFilePath=XmlCache.CacheFolderName+CacheFilePath;//用于存放Xml文件的相对路径 intMyCacheTime=CacheTime;//缓存时间(分) DataSetds=newDataSet();//存放数据记录的DataSet DataSetCacheDs=newDataSet();//获取缓存数据记录的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 {} } returnds; } #endregion #region获取/生成缓存文件方法(有cmdParams) ///<summary> ///获取/生成缓存文件方法(DataTable) ///</summary> ///<paramname="SQL">用于将Sql转化为MD5字符串</param> ///<paramname="CacheFilePath">存放Xml文件的相对路径(根目录已预置)</param> ///<paramname="CacheTime">缓存时间</param> ///<paramname="DataUsed">使用的数据库的链接字符串</param> ///<paramname="cmdParams">以数组形式提供SqlCommand命令中用到的参数列表</param> ///<returns></returns> publicstaticDataTableCacheFileByDataTable(stringSQL,stringCacheFilePath,intCacheTime,stringDBConstr,paramsSqlParameter[]cmdParams) { SQLHelper.SQLHelperQuerySql=newSQLHelper.SQLHelper(); if(CacheFilePath!=string.Empty&&CacheFilePath.StartsWith("/")) { CacheFilePath=CacheFilePath.Remove(0,1); } stringSqlMd5=SQL;//用于将Sql转化为MD5字符串 stringsqlmd5params=SQL; if(cmdParams!=null) { for(inti=0;i<cmdParams.Length;i++) { if(cmdParams[i].Value!=null) sqlmd5params+=cmdParams[i].Value.ToString(); } } stringStrSqlByMd5=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sqlmd5params,"MD5");//生成的Md5文件名 stringMyCacheFilePath=""; if(CacheTime>=10000)//如果大于20天的话系统默认为持久 { MyCacheFilePath=XmlCache.CacheFolderNameP+CacheFilePath;//用于存放Xml文件的相对路径 } else { MyCacheFilePath=XmlCache.CacheFolderName+CacheFilePath;//用于存放Xml文件的相对路径 } intMyCacheTime=CacheTime;//缓存时间(分) DataTabledt=newDataTable();//存放数据记录的DataTable DataTableCacheDt=newDataTable();//获取缓存数据记录的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); DataTabledt1=newDataTable(); if(dt!=null) { dt1=dt.Copy(); } //将DataTable存为XML文件 DataTableCache.SetDTCache(MyCacheFilePath,StrSqlByMd5,dt1); } returndt; } ///<summary> ///获取/生成缓存文件方法(DataSet)AddBywjf ///</summary> ///<paramname="SQL">用于将Sql转化为MD5字符串</param> ///<paramname="CacheFilePath">存放Xml文件的相对路径(根目录已预置)</param> ///<paramname="CacheTime">缓存时间</param> ///<paramname="DBName">使用的数据库的链接字符串</param> ///<paramname="cmdParams">以数组形式提供SqlCommand命令中用到的参数列表</param> ///<returns></returns> publicstaticDataSetCacheFileByDataSet(stringSQL,stringCacheFilePath,intCacheTime,stringDBConstr,paramsSqlParameter[]cmdParams) { SQLHelper.SQLHelperQuerySql=newSQLHelper.SQLHelper(); stringSqlMd5=SQL;//用于将Sql转化为MD5字符串 stringsqlmd5params=SQL; if(cmdParams!=null) { for(inti=0;i<cmdParams.Length;i++) { if(cmdParams[i].Value!=null) sqlmd5params+=cmdParams[i].Value.ToString(); } } stringStrSqlByMd5=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sqlmd5params,"MD5");//生成的Md5文件名 stringMyCacheFilePath=XmlCache.CacheFolderName+CacheFilePath;//用于存放Xml文件的相对路径 intMyCacheTime=CacheTime;//缓存时间(分) DataSetds=newDataSet();//存放数据记录的DataSet DataSetCacheDs=newDataSet();//获取缓存数据记录的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); DataSetds1=newDataSet(); if(ds!=null) { ds1=ds.Copy(); } //将DataSet存为XML文件 DataTableCache.SetDSCache(MyCacheFilePath,StrSqlByMd5,ds1); } returnds; } #endregion #region非持久保持 ///<summary> ///非持久保持 ///</summary> publicstaticstringCacheFolderName { 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 { returnm_CacheFolderName+DateTime.Now.ToString("yyyyMMdd")+"/"; } } else { returnm_CacheFolderName+DateTime.Now.ToString("yyyyMMdd")+"/"; } } set { m_CacheFolderName=value; } } #endregion #region持久保存(例如存放MapBar缓存的数据或需要3个月以上更新的数据等) ///<summary> ///持久保存(例如存放MapBar缓存的数据或需要3个月以上更新的数据等) ///</summary> publicstaticstringCacheFolderNameP { 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 { returnm_CacheFolderName; } } else { returnm_CacheFolderName; } } set { m_CacheFolderName=value; } } #endregion } #endregion
4、DATATABLE缓存
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。