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缓存
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: php模拟实现斗地主发牌
下一篇: .net 单点登录的设计与实践