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缓存
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。