ASP.NE的缓存技术提高Web站点的性能
一:我们为什么要使用缓存?
先来理解一下asp.net缓存技术的基本原理:把访问频繁的数据以及需要花大量的时间来加载的数据缓存在内存中,那么用户在下次请求同样的数据时,直接将内存中的数据返回给用户,从而大大的提高了应用程序的性能。
二:缓存的分类(整页缓存,页面部分缓存,应用程序缓存)
那么什么时候我们要用到整页缓存,什么时候用到部分页面缓存,什么时候我们要用到应用程序缓存呢?
>>整页缓存的情况:
a)不需要平凡更新数据的页面
b)占用大量时间和资源的页面
>>页面部分缓存:
顾名思义,页面部分缓存,则只需要缓存页面中的部分页面,常用方法是“缓存后替换”,就是下缓存整个页面,然后替换页面中不需要缓存的地方。这里要用到一个Substitution控件实现,稍后详细讲解它的应用。
>>应用程序缓存:
用来存储与应用程序相关的对象,主要由Cache类来实现,它给我们提供了一种机制,使我们可以通过编码的方式来灵活控制缓存操作。
三:如何使用"整页缓存"?
首先我们需要在页面顶部加上这样一个指令:
<%@ OutputCache Duation="5" VaryByParam="id,name" VaryByControl="none" Location="any" VaryByCustom="browser" %>
以下详细介绍一下各个属性的用途:
- Duration:必要属性,就是这个页面过多久后缓存不在起到作用,单位是s
- VaryByParam:以分号分隔的字符串变量/none/* ,none表示不随任何参数彼变化缓存,*表示为任何一个有效的参数缓存一个单独的页面。 注意:如果没有BaryByControl属性,该属性是必要的。
- VaryByControl:以分号分隔的字符串变量,代表用户控件中声明的服务器控件的ID,注意:如果没有VaryByParam,该属性是必须的。
- VaryByCustom:自定义输出缓存的要求,它需要在global.asax中定义自定义变动,一般默认值为browser,根据了浏览器决定缓存要求。
- Location:指定输出缓存项的位置,OutputCacheLocation枚举,默认值为any。
例如:现在我们有一个图书详情页面,这里就拿当当网的图书详情页面来举例,当当网当你选择一本书后,进入到图书详情页,详情页肯定会包含:该图书的点击量,价格,目录信息,作者,出版社等等的一些介绍。
那么我们要缓存这个页面首现需要在页面顶部添加这样一个指令:
1)首现无条件缓存:<%@ OutputCache Duration="120" VaryByParam="none" %>
这个表示什么意思呢?就是这个页面缓存时间为120秒,假如你进到这个详情页,然后卖家在后台修改了图书的出版社,那么你现在无论怎么刷新,你看到的价格始终都是刚进页面时的出版社信息。必须等到120s后,点击刷新才可以看到卖家修改后的出版社信息。
2)根据条件缓存:<%@ OutputCache Duration="120" VaryByParam="bookId,bookName" %>
这个就是说以bookId或者bookName作为参数传递的页面都将被缓存120s,例如:http://web/BookDetails.aspx?bookId ,页面会被缓存120s。
3)根据VaryByControl属性:<%@ OutputCache Duration="120" VaryByParam="none" VaryByControl="ddlCategories" %>
当需要缓存的数据随页面上的某个控件值的改变而改变,根据asp.net控件的命名规则,大家都知道ddlCategories控件就是一个图书的分类控件了(DropDawnList)。
现在假如有一个图书分类的页面,那么假如卖家修改了某个分类下的某一本图书的信息,当用户在页面中查看到的还是修改之前的信息,只有在更换ddCategories控件的项后,在更新才会显示修改后的图书信息。
四:如何使用"页面部分缓存"?
<%@ OutputCache Duration="120" VaryByParam="none" %>
什么情况我们要使用到部分页面缓存呢,还是拿图书详情页来举例子:现在要统计图书时实的点击量。
首先放入一个:<asp:Substitution ID="Sub1" runat="server" MethodName="GetClickCount" /> 控件。
这个控件就是用来显示点击量的,我们可以看到MethodName属性调用了一个GetClickCount()方法。
static string GetClickCount(HttpContext contxt)
{
//根据图书ID查询本图书的点击量
int clickCount = manage.GetClick(bookId);
return clickCount.ToString();
}
假如现在点击量是1000次,那么你刷新后,点击量可能变成了1000+次了,因为此时此刻该图书可能还有其他的用户在点击访问。由此证明该图书的点击量并没有被缓存起来。
这里需要注意的是:Substitution控件的MethodName属性所调用的方法必须满足以下三个条件。
1)必须是静态static方法
2)返回值必须是String类型
3)参数类型必须是HttpContext类型
五:如何实现"应用程序缓存"?
前面说到,应用程序缓存是用来存储与应用程序相关的对象,主要由Cache类来实现。
第一步当然要添加using System.Web.Caching的命名空间。
1)添加缓存:
- Cache[bookInfo"] = bookInfo;//这里就是缓存一个图书信息的对象。
那么现在假如说我们要设置缓存的有效期,就必须用到Cache的静态方法Add(),里设置缓存了。
- Cache.Add("key","缓存测试",null,DeteTime.Now.AddSeconds(6),TimeSpan.Zero,CacheItemPriority.High,null);
可以看到使用Add方法,七个参数必须写完整才生效,所以灵活性不够好。
- 使用Insert方法来实现多钟方式的方法重载。
- Cache.Insert("key1","使用insert缓存");//只需要键和值两个参数就可以添加缓存。
- Cache.Insert("key2","测试依赖性的缓存",new System.Web.Caching.CacheDependency(null,dependencies));//添加依赖项的缓存
- Cache.Insert("key3","设置有效期的缓存",DateTime.Now.AddMinutes(1d),System.Web.Caching.Cache.NoslidingExpiration);//设置有效期
- Cache.Insert("key4","测试添加优先级缓存",null,Cache.NoAbsoluteExpiration,Cache.NoAbsoluteExpiration,CacheItemPriorit.High,null);//添加优先级的缓存
2)检索缓存
由于缓存容易丢失,所以我们从缓存中取数据之前先要判断改缓存项是否存在。
通常这样检测:Cache["key"] 是否为 null。
3)移除应用程序的缓存对象
- 自动移除:缓存超过有效期,依赖性更改,缓存项就会自动移除。
- 显式移除:Cache.Remove("key") ; //键名
下面来举一个列子,说明应用程序缓存对象的用法。
private void CacheBookInfo(int bookId){ Book book = null;
//如果缓存为空,则说明是第一次加载,这时就缓存图书信息
if(Cache[bookId.ToString()]==null){
book = bookManager.GetBookById(bookId);
}else{
book = (Book) Cache[bookId.ToString()];
}
//假如该书有很高的访问量,则可以对该图书进行缓存
if(book.Clicks>20000){
Cache[bookId.ToString()] = book;
}
//下面就可以将book中的信息显示到页面了
lblBookName.Text = book.BookName;
//...
}
那么现在,我们为什么要使用缓存?缓存有哪几种方式?分别是怎样实现的?如果这三个问题弄明白了,就说明你对Asp.Net的缓存机制已经有了足够了解了。
ASP.NE的缓存技术提高Web站点的性能的更多相关文章
- 042. asp.net使用缓存来提高母版页的访问性能
Asp.Net缓存技术是一项非常重要的技术, 当一个页面被频繁的访问, 如果不使用缓存技术, 那么每访问一次就要回发一次服务器, 显然这样对服务器造成很大的负担, 所以, 可以在被频繁访问的页面中设置 ...
- 成倍提高服务器的负载能力:浅谈Jexus的ASP.NET前置缓存技术
一.什么是“ASP.NET前置缓存” ASP.NET前置缓存,是Jexus特色功能之一,是指Jexus把开发者指定的ASP.NET网页某一时刻的内容,缓存到专用的高速缓冲区中,在指定的时间内, ...
- 详解PHP操作Memcache缓存技术提高响应速度的方法
本文转载http://blog.csdn.net/zhihua_w 不错的博客,仅供本人学习之用 一般来说,如果并发量不大的情况,使不使用缓存技术并没有什么影响,但如果高并发的情况,使用缓存技术就显 ...
- ASP.NET Core 缓存技术 及 Nginx 缓存配置
前言 在Asp.Net Core Nginx部署一文中,主要是讲述的如何利用Nginx来实现应用程序的部署,使用Nginx来部署主要有两大好处,第一是利用Nginx的负载均衡功能,第二是使用Nginx ...
- Asp.Net Cache缓存技术学习
本文参考自Fish Li的细说 ASP.NET Cache 及其高级用法 一.前言,相信大多数做网站开发的都知道缓存技术对于网站的重要性,它对于网站的性能优化起着至关重要的作用. 关于缓存的技术大致有 ...
- ASP.NET Core如何使用压缩中间件提高Web应用程序性能
前言 压缩可以大大的降低我们Web服务器的响应速度,压缩从而提高我们网页的加载速度,以及节省一定的带宽. 何时使用相应压缩中间件 在IIS,Apache,Nginx中使用基于服务端的响应压缩技术.中间 ...
- PHP利用memcache缓存技术提高响应速度
PHP下memcache模块是一个高效的守护进程,提供用于内存缓存的过程式程序和面向对象的方便的接口,特别是对于设计动态web程序时减少对数据库的访问.memcache也提供用于通信对话(sessio ...
- 如何提高web页面的性能
1.浏览器渲染原理解析 想要提高网页的性能,首要的便是要理解浏览器渲染原理,下面关于浏览器的原理解析,我们以chrome内核webkit为例,其他内核的浏览器原理也基本大同小异,可触类旁通. 如上图所 ...
- 掌握提高 Web 应用的性能的方法 之 优化 PHP 和 Laravel
Laravel 有很多东西.但是快不是其中之一.让我们学习一些优化技巧,以加快运行速度! 自从 Laravel 诞生以来,没有一个 PHP 开发人员不受她的影响.他们是喜欢 Laravel 提供的快速 ...
随机推荐
- WAMP环境的安装与测试
首先来点其他的补充:web服务的发展历程 对等网服务模式 没有专门的服务器,也没有专门的客户端!无法提供可靠的服务! C/S模式 client/server,各自安装不同的客户端和服务器端! B/S模 ...
- Selenium+python+shell+crontab+firefox
最近在尝试一个自动打卡的脚本,发现了几个问题,特此记录一下. 环境: Ubuntu 12.04.4 LTS selenium 2.43.0 firefox 32.0.3 1 本来机器上selenium ...
- poj 3641 Pseudoprime numbers Miller_Rabin测素裸题
题目链接 题意:题目定义了Carmichael Numbers 即 a^p % p = a.并且p不是素数.之后输入p,a问p是否为Carmichael Numbers? 坑点:先是各种RE,因为po ...
- oracle查询和设置过期时间
第一步:找到oracle 打开enterprise Manager Console如下图: 第二步,找到概要文件: sys 用户进入,找到你的数据库(如:ora8)-“安全性”-"用户&qu ...
- 在scrollView中使用pageControl
在scrollView中使用pageControl 要这样才能效果好,合理而且人性化 -(void)scrollViewDidScroll:(UIScrollView *)scrollView{ if ...
- 解决eclipse复制粘贴js代码卡死的问题
鸣谢:http://blog.csdn.net/zhangzikui/article/details/24805935 ---------------------------------------- ...
- 【弱省胡策】Round #5 Construct 解题报告
这个题是传说中的 Hack 狂魔 qmqmqm 出的构造题.当然要神. 这个题的本质实际上就是构造一个图,然后使得任意两点间都有长度为 $k$ 的路径相连,然后对于任意的 $i < k$,都存在 ...
- IIC驱动分析
IIC设备是一种通过IIC总线连接的设备,由于其简单性,被广泛引用于电子系统中.在现代电子系统中,有很多的IIC设备需要进行相互之间通信 IIC总线是由PHILIPS公司开发的两线式串行总线,用于连接 ...
- 学点PYTHON基础的东东--数据结构,算法,设计模式---观察者模式
按照小明明的设计模式抄抄看看.. http://dongweiming.github.io/python-observer.html # 这个是观察者基类 class Subject(object): ...
- android webview网页控件
一个WebView的简单例子 .在开发过程中应该注意几点: 1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则 ...