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 提供的快速 ...
随机推荐
- PHP开发环境和软件
1/很方便的软件XAMMP集成了PHP+MYSQL+MYPHPADMIN等等软件 2/sublime text 程序员神器,都明白的 ps.如果装了vm虚拟机,80端口有时候会被占用,进程关闭就好.
- 手把手教你写LKM rookit! 之 第一个lkm程序及模块隐藏(一)
唉,一开始在纠结起个什么名字,感觉名字常常的很装逼,于是起了个这<手把手教你写LKM rookit> 我觉得: 你们觉得:...... 开始之前,我们先来理解一句话:一切的操作都是系统调用 ...
- Arcgis 10.1 求面里面所包含的点的平均值
空间链接的作用:将面上的所有点的值加起来取平均值。赋值给面属性。(我们可以定义右击——定义合并规则 连接要素的字段映射参数中指定的合并规则仅适用于连接要素中的属性,且仅适用于多个要素与目标要素匹配 ...
- OFBIZ bug_ControlServlet.java:239:ERROR
错误日志: [java] 2014-09-23 00:11:34,877 (http-bio-0.0.0.0-8080-exec-4) [ ControlServlet.java:141:INFO ] ...
- 一、记一次失败的 CAS 搭建 之 环境配置
==================================================================================================== ...
- 商品库存SKU
一种解决方案(性能垃圾,基本实现功能)商品表 属性集表 属性表 属性值表 SKU表 SKU选项表 属性集和属性之间的中间表表关系商品表 *--------------1 属性集表属性集表 *- ...
- iOS 跳转到系统的设置界面-b
在项目中,我们经常会碰到使用位置的需求.当用户设置app不允许使用位置的时候,最好的用户体验就是直接调转到系统的位置设置界面,进行设置. 本人已经测试,在5c iOS8.3系统 和 5s iOS7.1 ...
- Linux学习笔记(6)-工作管理
什么是工作管理 工作来自job命令的翻译,job命令可以查看后台工作的进程.举例来说什么是工作管理,当你要打包一个比较大的目录时,很耗时间,但是你同时又需要使用别的命令.你会想我可以到开几个终端进行登 ...
- tomcat集群时统计session与在线人数
tomcat集群时,原来通过HttpSessionListener实现类监听session的创建和销毁来统计在线人数的方法不再有效,因为不是每个人登陆都会在同一个tomcat服务器上,而在另一台tom ...
- Codeforces Round #346 (Div. 2) E - New Reform 无相图求环
题目链接: 题目 E. New Reform time limit per test 1 second memory limit per test 256 megabytes inputstandar ...