当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET页面缓存常见的4种方式

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

2017年12月12日  | 移动技术网IT编程  | 我要评论

深圳火车站官网,泸县论坛,杨光标

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网