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

本文为大家分享了4种常见的ASP.NET页面缓存方式,供大家参考,具体内容如下

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

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缓存

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 设置ASP.NET页面不被缓存(客户端/服务器端取消缓存方法)

    复制代码 代码如下: /// <summary> /// 设置页面不被缓存 /// </summary> private void SetPageNoCache() { Response.Buffer = true; Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1); Response.Expires = 0; Response.CacheControl = "no-cache"; Res

  • 让html页面不缓存js的实现方法

    本文实例讲述了让html页面不缓存js的实现方法.分享给大家供大家参考.具体实现方法如下: 很多朋友都会碰到这样的情况:如果我们页面加载了js的话下次打开时也会是调用这个js缓存文件,但对于我们调试时是非常的不方便了,本文就来谈论如何解决这一问题,下面一起来看看. 不缓存JS的方法其实挺简单,CSS在某种条件下也可以如此使用: 先让大家了解下不缓存的一个简单的原理: 当浏览不同Url时,浏览器会自动将当前访问的地址进行一次缓存:而第二次访问时着调用缓存下来的页面,从而达到页面快速加载(页面加载优

  • asp.net 页面输出缓存

    主要用于不经常更新和修改,而在第一次编译是时要经过大量处理的数据.页面输出缓存是缓存的整个页面 使用很简单<%@ OutPutCache Duration="60" VaryByParam="none"%> Duration:缓存时间 VaryByParam:通过参数来更新缓存的内容 还有其他的一些属性 CacheProfile:调用WebConfig中的缓存时间 例如:WebCofig中 复制代码 代码如下: <system.web> &l

  • Asp.net禁用页面缓存的方法总结

    1.在Asp页面首部<head>加入  复制代码 代码如下: Response.Buffer   =   True      Response.ExpiresAbsolute   =   Now()   -   1      Response.Expires   =   0      Response.CacheControl   =   "no-cache"      Response.AddHeader   "Pragma",   "No-

  • ASP.NET 4中的可扩展输出缓存(可以缓存页面/控件等)

    输出缓存的前世今生 ASP.NET 1.0引入输出缓存的概念,这使得开发者可以缓存页面.控件.控制器以及HTTP响应的输出到内存中.在后续的Web请求,ASP.NET就可以使用缓存中的内容更快响应. ASP.NET的输出缓存系统足够灵活,使得我们可以根据不同的查询字符串或者表单post参数来缓存不同版本的内容.例如test.aspx?category=Vegerable 和 test.aspx?category.aspx?category=Meat.它也允许我们根据浏览器类型或者用户语言偏好来缓

  • asp.net页面SqlCacheDependency缓存实例

    缓存技术是asp.net程序设计中非常实用的技术,也是大型web程序设计中比较常见的技术.本文就以实例形式对此加以说明.具体如下: asp.net页面的SqlCacheDependency Sql缓存: Cahce/SqlCachePage.aspx页面代码如下: <%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile=&qu

  • ASP.NET 2.0中的页面输出缓存

    静态页面全部内容保存在服务器内存中.当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期.这个过程中,缓存不需要再次经过页面处理生命周期.这样可以缩短请求响应时间,提高应用程序性能.很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面.对于那些数据经常更新的页面,则不适用.默认情况下,ASP.NET 2.0启用了页面输出缓存功能,但并不缓存任何响应的输出.开发人员必须通过设置,使得某些页面的响应成为缓存的一部分. 设置页面输出缓存可以使用以下两种方式:一

  • ASP.NET页面在IE缓存的清除办法

    以前没有注意到这个问题,今天在看Blog的时候发现有篇文章不错,或许以后值得借鉴: 一般情况下,WEB页面都会在Internet临时文件夹中有一个临时文件.我在操作IE时会出现这种情况:假如说有一个页面Page1.aspx,在我第一次访问后,它会在我的Internet临时文件夹里有一个Page1.aspx文件生成.之后,如果我改了Page1.aspx的数据后再次访问该页面,发现IE并没有对这个Page1.aspx的数据进行更新,反而打开的是我第一次访问的页面.为什么会这样,是因为IE自动(默认)

  • asp.net 使用驻留在页面中的Cache缓存常用可定时更新的数据

    就是希望让Web应用程序从一开始运行到结束都一直存在,有人就说为什么不用Application呢?其实Cache是可以一段时间内自动更新数据的,而Application就无法做成这样的,另外Application在Web这种高并发的系统中一定要考虑线程安全的问题,Application本身就不是线程安全的,而Cache就是线程安全.所以一般我都会在很多对象中我只从Web开始运行的时候从数据库或文件里获取一次数据,在不同的页面中,都是使用Cache的,而且Cache中的数据可能弄成自动更新的,所以

  • ASP.net Substitution 页面缓存而部分不缓存的实现方法

    文件1:Deafault.aspx 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ outputcache duration="10" varybyparam="none" %> <!-

随机推荐