欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-22 12:51:24
本文为大家分享了4种常见的asp.net页面缓存方式,供大家参考,具体内容如下 1、分布式缓存memcached,教程下载 2、内存缓存,此占用服务器资源...

本文为大家分享了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缓存

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