使用Cache提高ASP.NET性能
创始人
2024-04-25 09:30:28
0

使用Cache提高ASP.NET性能

虽然现在已经是宽带时代,小猫已经离我们渐渐远去,可作为WEB应用开发者来说,我们仍然有责任和义务不断地通过技术手段来优化WEB应用性能,让用户浏览时少一些等待,多一些爽快。

所幸的是,ASP.NET作为基于.Net Framework的WEB开发技术,它也享用着.Net Framework的优越性,.Net Framework为我们提供了良好的Cache技术,使我们能开发出速度更快、用户体验更好的WEB应用。命名空间System.Web.Caching提供了Cache类,其Cache的有效性依赖分以下三种情况:
1.时间点(指定时间点内有效);
2.KEY值(KEY值作Cache项标识);
3.文件或目录(指定文件或目录变更,则原Cache项不可用);

下面我就结合实际开发的应用跟大家分享一下使用Cache提高ASP.NET性能。

我们在开发中常常会遇到读取记录列表(例如最近更新的新闻列表Top N)、记录本身(例如一条新闻),用户访问的时候,这样的信息是否每次都要重复从数据库中读取呢?聪明的你可能知道,这完全是没必要的。

我们为了方便处理,不防设计一个SiteCache类(借鉴了CS中的CSCache.cs),并提供若干静态方法,来负责处理Cache项的添加和删除。下面给出类图:

Cache项的添加和删除


其实该类主要就是利用前文所提及的关于Cache依赖项的第一点与第二点的特性来维护我们自己的Cache项。有了SiteCache类,接下来看看如何使用它。还是以读取新闻TonN列表为例:

  1. public static RecordSet GetNewsSetTopN(string classCode,int topN,
    SortPostsBy orderBy, SortOrder sortOrder, string language)  
  2. {  
  3. string cacheKey = string.Format("NewsSetTopN-LG:{0}:CC:{1}:TN:{2}:OB:{3}:SO:{4}", 
    language,classCode,topN.ToString(), orderBy.ToString(),sortOrder.ToString());  
  4.  
  5. //从上下文中读缓存项  
  6. RecordSet newsSet = HttpContext.Current.Items[cacheKey] as RecordSet;  
  7. if (newsSet == null)  
  8. {  
  9. //从HttpRuntime.Cache读缓存项  
  10. newsSet = SiteCache.Get(cacheKey) as RecordSet;  
  11. if (newsSet == null)  
  12. {  
  13. //直接从数据库从读取  
  14. CommonDataProvider dp=CommonDataProvider.Instance();  
  15. newsSet =dp.GetNewsSetTopN(language,classCode,topN,orderBy,sortOrder);  
  16. //并将结果缓存到HttpRuntime.Cache中  
  17. SiteCache.Insert(cacheKey, newsSet, 60, CacheItemPriority.Normal);  
  18. }  
  19. }  
  20. return newsSet;  

这样在5分钟内就不用重复访问数据库了来读该列表了,当然,也有人会问,如果在这5分钟内某条新闻删除了或修改了怎么办,没关系,我们在删除或修改时可以根据Cache KEY来强制删除该Cache项,当然,如果你觉得你对列表的时效性不是特别在意,你可以不强制删除该Cache项,让Cache项定义的时间点自动失效。当然,最好还是提供一个方法按匹配模式项来强行删除Cache项就可以了,例如:

  1. ///  
  2. /// 删除匹配的NewsSetTopN列表的Cache项  
  3. /// 
  4.  
  5. public static void ClearNewsSetTopNCache(string language,
    string classCode,int topN)  
  6. {  
  7. string cacheKey = string.Format("NewsSetTopN-LG:{0}:CC:{1}:TN:{2}",
    language,classCode,topN.ToString());  
  8. SiteCache.RemoveByPattern(cacheKey);  

发布新闻后调用静态方法ClearNewsSetTopNCache()强行清除原来的TopN缓存项,例如:

  1. ///  
  2. /// 发布(新建)新闻  
  3. /// 
  4.  
  5. ///  name="post">新闻实例 
  6. /// 返回状态 
  7. public static int Create(News post)  
  8. {  
  9. int status;  
  10. CommonDataProvider dp=CommonDataProvider.Instance();  
  11. dp.CreateUpdateDeleteNews(post, DataAction.Create, out status);  
  12. //强制清除匹配的缓存项  
  13. ClearNewsSetTopNCache (post.Language, post.ClassCode,Globals.
    GetSiteSetting.NewsListTopN);  
  14. return status;  

以上介绍使用Cache提高ASP.NET性能。

【编辑推荐】

  1. ASP.NET开发技巧之Theme功能浅析
  2. 详解ASP.NET动态编译
  3. Apache支持ASP.NET方法浅析
  4. 浅谈ASP.NET服务器标准控件
  5. ASP.NET中SQL Server数据库备份恢复浅析

相关内容

热门资讯

Oracle中查询rownum... 在查询中,我们可以注意到,类似于“select xx from table where rownum...
软考信息系统项目管理师考哪些 ... 1.考试要求(1)掌握信息系统知识;(2)掌握信息系统项目管理知识和方法;(3)掌握大型、复杂项目管...
F5中国区总经理张毅强:ADN... [[2908]]F5中国区总经理张毅强在金融危机面前,节约成本优化IT架构则成为是客户重点的投资方向...
51CTO独家:2009年上半... 【51CTO.com独家特稿】2009年上半年软考在5月23日进行,本文是51CTO.com独家**...
垃圾邮件的五大特性分析及应对技... 对于垃圾邮件,已经在《中国互联网协会反垃圾邮件规范》中给出了一个明确的定义,但是它并不足以让我们了解...
SonicWALL公司发布其2... 【51CTO.com 综合消息】2009年5月19日,日前,SonicWALL, Inc. 宣布公布...
数十家黑客网站利用暴风影音零日... 【51CTO.com 综合消息】5月5日,江民反病毒中心监测发现,“暴风影音”最新版本出现的零日漏洞...
JSP验证码学习笔记 即使拼音... 1、我们在做JSP验证码的时候往往由于要反作弊,验证有时故意加入多的干扰因素,这时JSP验证码显示不...
JSP SQL Server连... JSP SQL Server连接 ***步:----安装J2SDK:到SUN官方站点(http://...
Android开发环境配置简介 写这个系列的原因也是因为自己对android比较感兴趣,而网上多数教程都是直接参照官方翻译,并且翻译...