缓存技术.docx

上传人:b****4 文档编号:3488434 上传时间:2022-11-23 格式:DOCX 页数:29 大小:204.34KB
下载 相关 举报
缓存技术.docx_第1页
第1页 / 共29页
缓存技术.docx_第2页
第2页 / 共29页
缓存技术.docx_第3页
第3页 / 共29页
缓存技术.docx_第4页
第4页 / 共29页
缓存技术.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

缓存技术.docx

《缓存技术.docx》由会员分享,可在线阅读,更多相关《缓存技术.docx(29页珍藏版)》请在冰豆网上搜索。

缓存技术.docx

缓存技术

缓存技术

一、教学要求

通过学习ASP.NET2.0缓存技术的理论知识,掌握缓存技术的使用方法,能应用到实际问题当中。

二、教学目的

掌握页面输出缓存的使用方法

掌握页面部分缓存的使用方法

掌握应用程序数据缓存的使用方法

掌握缓存依赖的用法

三、基础知识

1.页面输出缓存

页面输出缓存作为最简单的缓存形式,将已经生成的动/静态页面全部内容保存在服务器内存中。

当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期。

这个过程中,缓存不需要再次经过页面处理生命周期。

这样可以缩短请求响应时品提高应用程序性能。

很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面。

对于那些数据经常更新的页面,则不适用。

默认情况下,ASP.NET2.0.0启用了页面输出缓存功能,但并不缓存任何响应的输出。

开发人员必须通过设置,使得某些页面的响应成为缓存的一部分。

设置页面输出缓存可以使用以下两种方式:

一种是使用@OutPutCache指令,另一种是使用页面输出缓存API。

方法一:

使用@OutPutCache指令

使用@OutPutCache指令,能够实现对页面输出缓存的一般性需要。

@OutPutCache指令在ASP.NET页或者页中包含的用户控件的头部声明。

这种方式非常方便,只需几个筒单的属性设置,就能够实现页面的输出缓存策略。

@OutPutCache指令声明代码如下:

<%@OutputCacheCacheProfile=””NoStore=”True|False”Duration=”#ofseconds”

Shared=”True|False”Location=”Any|Client|Downstream|Server|None|ServerandClient”

SqlDependency=”database/tablenamepair|CommandNotification”

VaryByControl=”controlname”VaryByCustom=”browser|customstring”

VaryByHeader=”headers”VaryByParam=”parametername”%>

如上所示,在@OutPutCache指令中,共包括10个属性,下面简要介绍以上属性的基本概念。

(1)CacheProfile

用于定义与该页关联的缓存设置的名称。

是可选属性,默认值为空字符(“”)需要注意的是,包含在用户控作中的@OutPutCache指令不支持此属性。

在页面中指定此属性时,属。

性值必须与Web.config文件<outputCacheSettings>6己置节下的outputCacheProfiles元素中的一个可用项的名称匹配。

如果此名称与配置文件项不匹配,将引发异常。

(2)Nostore

该属性定义一个布尔值,用于决定是否阻止敏感信息的二级存储。

需要注意的是,包含在用户挂件中的@OutPutCache指令不支持此属性。

将此属性设置为trUe等效于在请求期间执行代码“Response.Cache.SetNostore();”。

(3)Duration

用于设置页面或者用户控件缓存的时间。

单位是秒。

通过设置该属性,能够为来自对象的HTTh响应建立了一个过期策略,并将自动缓存页或用户控件输出。

需要注意的是,Duraton属性是必需的,否则将会引起分析器错误。

(4)Shared

该属性定义一个布尔值,用于确定用户控作输出是否可以由多个页共享。

默认值为false。

注意包舍在ASP.NET页中的@@OutPutCache指令不支持此属性。

(5)Location

用于指定输出缓存项的位置。

其属性值是OutPutCacheLocation枚举值,它们是Any、Client、Downstream、None、Server和ServerAndClient。

默认值是人呼,表示输出缓存可用于所有请求,包括客户端浏览器、代理服务器或处理请求的服务器上。

需要注意的是,包含在用户控作中的@OutPutCache指令不支持此属性。

(6)SqlDependency

该属性标识一组数据库/表名称对的字符串值,页或控作的输出缓存依赖于这些名称对。

需要注意:

SqlCacheDependency类监视输出缓存所依赖的数据库中的表,因此,当更新表中的项时,使用基于表的轮询将从缓存中移除这些项。

当通知(在SQLServer2005中)与CommandNotification值一起使用时,最终将使用SqlDependency类向SQLServer2005服务器注册查询通知。

另外,SqlDependency属性的CommandNotification值仅在ASP.NET页中有效。

控作只能将基于表的轮询用于@OutPutCache指令。

(7)VaryControl

该属性使用一个分号分隔的字符串列表来更改用户控件的输出缓存。

这些字符串代表在用户控作中声明的ASP.NET服务器控件的*属性值。

除非已经包含了VaryByParam属性,否则在@OutPutCache指令中,该属性是必需的。

(8)VaryByCustom

用于自定义输出缓存要求的任意文本。

如果赋予该属性值是browser,缓存将随浏览器名称和主要版本信息的不同而异。

如果输入了自定义字符串,则必须在应用程序的Global.asax文件中重写H由江HttpApplication.GetVaryCustomstring方法。

(9)VaryByHeader

该属性中包含由分号分隔的HTTP标头列表,用于使输出缓存发生变化。

当将该属性设为多标头时,对于每个指定的标头,输出缓存都包含一个请求文档的不同版本。

VyByHeader属性在所有HTTP.l缓存中启用缓存项,6不仅限于ASP.NET缓存。

用户控件中的@OlltputCache指令不支持此属性。

(10)VaryByParam

该属性定义了一个分号分隔的字符串列表,用于使输出缓存发生变化。

默认情况下,这些字符串与用GET方法属性发送的查询字符串值对应,或与用POST方法发送的参数对应。

当将该属性设置为多参数时,对于每个指定的参数,输出缓存都包含一个请求文档的不同版本。

可能的值包括“none”、“*”和任何有效的查询字符串或POST参数名称。

值得注意的是,在榆出缓存ASP.NET页时,该属性是必需的。

它对子用户控件也是必需的,除非已经在用户控作的@OutPutCache指令中包含了VaryByControl属性。

如果没有包含,则会发生分析器铐误。

士。

果不需要使缓存内容随任何指定参数发生变化,则可将该值设为“none”。

如果要使输出缓存根据所有参数值发生变化,则将属性设置为“*”。

方法二:

使用页面输出缓存API

上文介绍了使用@OutPutCache指令实现对于输出缓存的各项设置。

这种方法简单易行,深得开发人员青睐。

另外,ASP.NET2.0对还从ASP.NET*中继承和扩展了一种使用输出缓存API来编程设置页面输出缓存的方法。

该方法的核心是调用SystemWebHttpCachePolicy。

该类主要包含用于设置缓存特定的HTTP标头的方法和用于控制ASP.NET页面输出缓存的方法。

与.NETFramework2.0中的HttpCachePolicy类相比,NETFramework2.0中的HttpC。

hePolicy类得到了扩充和发展。

主要是增加了一些重要方法,下面简要说明一些常用方法。

(1)SetExpires方法

用于设置缓存过期的绝对时间。

它的参数是一个DataTime类的实例,表示过期的绝对时间。

(2)SetLastModified方法

用于设置页面的Last-ModifiedHTTP标头。

Last-ModifiedHTTP标头表示页面上次修改时间,缓存将依靠它来进行计时。

如果违反了缓存限制层次结构,此方法将失败。

该方法的参数是一个DataTime类的实例。

(3)SetslidingExpiration方法

该方法将缓存过期从绝对时间设置为可调时间。

其参数是一个布尔值。

当参数为true时,Cache-ControlHTTP标头将随每个响应而更新。

此过期模式与相对于当前时间将过期标头添加到所有输出集的IIS配置选项相同。

当参数为false时,将保留该设置,且任何启用可调整过期的尝试都将静态失败。

此方法不直接映射到HTTP标头。

它由后续模块或辅助请求来设置源服务器缓存策略。

(4)SetOmitVaryStar方法

ASP.NET2.0对新增的方法。

用于指定在按参数进行区分时,响应是否应该包含Vary:

*标头。

方法参数是一个布尔值,若要指示HttpCachePolicy不对其VaryByHeaders属性使用*值,则为true;否则为false。

(5)SetCacheability方法

用于设置页面的Cache-ControlHTTP标头。

该标头用于控制在网络上缓存文档的方式。

该方法有两种重载方式,所不同的是参数。

一种重载方法的参数是HttpCacheability枚举值,包括NoCache、Private、Public、Server、SerAndNoCache和ServerAndPrivate(有关这些枚举值的定义,可参考MSDN)。

另一种方法的参数有两个,一个参数是HttpCacheability枚举值,另一个参数是字符率,表示添加到标头的缓存控制扩展。

需要注意的是,仅当与Private或NoCache指令一起使用时,字段扩展名才有效。

如果组合不兼容的指令和扩展,则此方法将引发无效参数异常。

2.页面部分缓存

页面部分缓存是指输出缓存页面的某些部分,而不是缓存整个页面内容。

实现页面部分缓存有两种机制:

一种是将页面中需要缓存的部分置于用户控件(.aspx文件)中,并且为用户控件设置缓存功能(包含用户控件的ASP.NET页面可设置也可不设置缓存)。

这就是通常所说的“控件缓存”。

设置控件缓存的实质是对用户控件进行缓存配置。

主要包括以下3种方法:

一是使用@OutPutCache指令以声明方式为用户控件设置缓存功能,二是在代码隐藏文件中使用PartialCachingAttribute类设置用户控件缓存;三是使用ControlCachePolicy类以编程方式指定用户控件缓存设置。

另外,还有一种称为“缓存后替换”的方法。

该方法与控件缓存正好相反,将页面中的某一部分设置为不缓存,因此,尽管缓存了整个页面,但是当再次请求该页时,将重新处理那些没有设置为缓存的内容。

方法一:

使用@OutPutCache指令

控件缓存与页面输出缓存的@OutPutCache指令既有相似之处,又有不同的方面。

二者的共同点在于它们的设置方法基本相同,都是文件顶部设置包含属性的@OutPutCache指令字符串。

不同点包括以下两个方面:

一是控件缓存的@OutPutCache指令设置在用户控件文件中,而页面输出缓存的@OutPutCache设置在普通ASP.NET文件中。

二是控件缓存的@OutPutCache指令只能设置6个属性,Duration、Shared、SqlDependency、VaryByControl、VaryByCustom和VaryByParam。

而在页面输出缓存的@OutPutCache指令字符串中设置的属性多达10个。

以上是设置控件缓存时需要注意的问题。

如果读者已经掌握了页面输出缓存的@OutPutCache指令设置方法,那么控件缓存的@OutPutCache指令也会迎刃而解,无非仅使用其中的6个属性而已。

然而,可能会产生疑问:

如果ASP.NET页面和其中包含的用户控件都通过@OutPutCache指令设置了缓存,那么缓存该如何运行呢?

遇到这个问题时,应掌握以下3个基本原则:

一是ASP.NET允许在页面和页面的用户控件中同时使用@OutPutCache指令设置缓存,并且允许设置不同的缓存过期时间值。

二是如果页面输出缓存过期时间长于用户控件输出缓存过期时间,则页面的输出缓存持续时间优先。

例如,如果页面输出缓存设置为100秒,而用户控件的输出缓存设置为50秒,则包括用户控件在内的整个页将在输出缓存中存储100秒,而与用户控件较短的时间设置无关。

三是如果页面输出缓存过期时间比用户控件的输出缓存过期时间短,则即使已为某个请求重新生成该页面的其余部分,也将一直缓存用户控件直到其过期时间到期为止。

例如,如果页面输出缓存设置为50秒,而用户控件输出缓存设置为100秒,则页面其余部分每到期两次,用户控件才到期一次。

方法二:

使用PartialCachingAttribute类

使用PartialCachingAttribute类可在用户控件的代码隐藏文件中设置有关控件缓存的配置内容。

此处应重点了解PartialCachingAttribute类的6个常用属性和4种类构造函数。

6个常用属性是Duration、Shared、SqlDependency、VaryByControl、VaryByCustom和VaryByParam。

这与上文所示的控件缓存@OutPutCache指令设置的6个属性完全相同,只是所使用的方式不同。

在此不对这6个属性重复介绍。

下面重点说明PartialCachingAttribute类的4种构造函数,这对于使用该类有着重要意义。

(1)[PartialCaching(intduration)]

这是最为常用的一种格式。

其参数duration为整数类型,用于设置用户控作缓存有效期时间值。

该参数与@OutPutCache指令中的Duraion属性对应。

(2)[PartialCaching(intduration,stringvaryByParams,stringvaryByControls,stringvaryByCustom)]

这种格式设置的内容较多。

参数duration与上面说明的相同。

参数varyByParams是一个由分号分隔的字符串列表,用于使输出缓存发生变化。

该参数与@OutPutCache指令中的VaryByParam属性对应。

参数varyByControls是一个由分号分隔的字符串列表;用于使输出缓存发生变化,其与@OutPutCache指令中的VaryByControl属性对应。

参数varyByCustom用于设置任何表示自定义输出缓存要求的文本,与@OutPutCache指令中的VaryByCustom属性对应。

(3)[PartialCaching(intduration,stringvaryByParams,stringvaryByControls,stringvaryByCustom,boolshared)]

这种格式中,参数duration、varyByParams、varyByControls、varyByCustom都与上面说明的参数相同。

只有参数shared是新添加的。

参数shared值是一个布尔值,用于确定用户控件输出缓存是否可以由多个页面共享。

默认值为false。

当该参数设置为true,表示用户控件输出缓存可以被多个页面共享,可以潜在节省大量内存。

(4)[PartialCaching(intduration,stringvaryByParams,stringvaryByControls,stringvaryByCustom,stringsqlDependendency,boolshared)]

以上格式中添加了一个新参数sqlDependency。

用于设置用户控件缓存入口所使用SQLServer缓存依赖功能的数据库及表名。

如果包含多个数据库及表名,则使用分号(;)分隔开来。

当该属性值发生变化时,缓存入口将过期。

另外,数据库名必须与web.config义作中的<sqlcachedependency>配置节的内容匹配。

方法三:

使用ControlCachePolicy类

ControlCachePolicy是.NETFramework2.0中新出现的类,主要用于提供对用户控件的输出缓存设置的编程访问。

ControlCachePolicy类与前文说明的HttpCachePolicy类有些类似。

只是二者所访问的对象不同。

HttpCachePolicy类用于访问页面输出缓存,而ControlCachePolicy类用于访问用户缓存。

使用ControlCachePolicy类有以下注意事项。

一是如果要创建正确有效的ControlCachePolicy类实例以便设置控件缓存,那么必须访问PartialCachingControl类的BasePartialCachingControl.CachePolicy属性(BasePartialCachingControl是PartialCachingContrl类的基类)。

在这个过程中,需要调用LoadControl方法,实现动态加载用户控件,这样才能获得为PatialCachingControl类包装的用户控件实例,进而利用其CachePolicy属性获取ControlCachePolicy实例。

如果直接访问用户控件的UserControl.CachePolicy属性,则只能在该用户控件已由BasePartialCachingControl控件包装的情况下,才能获取有效的ControlCachePolicy实例。

如果用户控件未进行包装,那么尝试通过CachePolicy属性获取ControlCachePolicy实例将引发异常,因为它不具有关联的BasePartialCachingControl。

若要确定用户控件实例是否支持缓存(而不生成异常),可检查SupportsCaching属性。

二是ControlCachePolicy实例仅在控件生命周期的Init和PreRender阶段之间,才能成功操作。

如果在PreRender阶段后修改ControlCachePolicy对象,则ASP.NET会引发异常,因为呈现控件后所进行的任何更改,都无法影响缓存设置(控件在Render阶段缓存)。

以上内容说明最好在Page_Init事件处理程序中,创建并操作ControlCachePolicy实例。

下面首先讲解ControlCachePolicy类的6个属性,它们是Cached、Dependency、Duration、SupportsCaching、VaryByControl和VaryByParams。

(1)Cached属性

用于获取或者设置一个布尔值,表示是否在用户控件中启用控件缓存功能。

true表示启用控件缓存功能,否则为false。

(2)Dependency属性

用于获取或者设置一个CacheDopendeny实例对象,该对象与用户控件的输出缓存关联。

默认值为null。

当CacheDependency实例对象失效时,用户控件的输出缓存将从缓存中移除。

(3)Duration属性

获取或者设置一个TimeSpan结构,表示用户控件输出缓存的有效时间。

默认值为Zero。

(4)SupportsCaching属性

该属性获取一个布尔值,用于表示用户控件是否支持缓存功能。

如果属性值为true,则表示该用户控件支持缓存;否则为false。

(5)VaryByControl属性

用于获取或者设置一个由分号分隔的字符串列表,这些字符串包含在用户控件中声明的服务器控作ID属性值。

可根据该属性值,使输出缓存发生变化。

(6)VaryByParams属性

用于获取或者设置一个由分号分隔的字符串列表。

默认情况下,这些字符串与用GET方法属性发送的查询字符串值对应,或与用POST方法发送的参数对应。

用户控件可根据该属性值,使输出缓存发生变化。

另外,ControlCachePolicy类还包括3个常用方法,SetExpires、SetSlidingExpiration和VaryByCustom。

(1)publicvoidSetExpires(DateTimeexpirationTime);

指示用户控件输出缓存入。

在特定的时间内过期。

可使用SetExpires和参数设置为true的SetslidingExpiration方法指示用户控件输出缓存使用可调过期策略。

如果SetslidingExpiration方法的参数设置为false,则用户控作输出缓存使用绝对过期策略。

(2)publicvoidSetSlidingExpiration(booluseSlidingExpiration);

指示用户控件缓存入口使用Sliding过期策略,或者Absolute过期策略。

当参数useSlidingExpiration设置为true时,则用户控件输出缓存使用Sliding过期策略。

否则,使用Absolute过期策略。

(3)publicvoidSetVaryByCustom(stingvaryByCustom);

用于自定义用户控件输出缓存使用的任意文本。

如果该属性值是browser,用户控件输出缓存将随浏览器名称和主要版本信息的不同而不同。

如果输入了自定义字符串,则必须在Global.asaxN件中重写HttpApplication.GetVaryByCustomstring万法。

方法四:

实现缓存后替换

ASP.NET页面中既包含静态内容,又包含基于数据库数据的动态内容。

静态内容通常不会发生变化。

因此,对静态内容实现数据缓存是非常必要的。

然而,那些基于数据的动态内容,则不同。

数据库中的数据可能每时每刻都发生变化,因此,如果对动态内容实现缓存,可能造成数据不能及时更新的问题。

对此问题如果使用前文所述的控件缓存方法,显然不切实际,而且实现起来很繁琐,易于发生错误。

以上所述问题的本质是如何才能够实现缓存页面的大部分内容,而不缓存页面中的某些片段。

ASP.NET2.0提供了缓存后替换功能。

实现该项功能可通过以下3种方法:

一是以声明方式使用Substitution控件,二是以编程方式使用Substitution控件API,三是以隐式方式使用AdRotator控件。

前两种方法的核心是substitution控件,本节将重点介绍该控件,第三种方法仅专注于AdRotator控件内置支持的缓存后替换功能,本节仅做简要说明。

3.应用程序数据缓存

应用程序数据缓存的主要功能是在内存中存储各种与应用程序相关的对象。

通常这些对象都需要耗费大量的服务器资源才能创建。

因此,对这些对象实施缓存,无论对于服务器还是用户,都有着明显的益处。

应用程序数据缓存的生存期依赖于应用程序生存期。

当应用程序重新启动时,系统将根据设置,重新创建应用程序数据缓存对象。

应用程序数据缓存由Cache类实现,该类从属于System.Web.Caching名字空间,其实例对象为每个应用程序所专用。

通过对Cache类的应用,可轻松实现添加、检索和移除应用程序数据缓存,以及移除缓存项时通知应用程序等功能。

在实现应用程序数据缓存管理时,通常采用一个简单的模式。

首先,需要确定在访问某一缓存项时,该项是否存在于缓存中。

如果存在,则使用。

如果不存在,则可以重新创建该项,随后将其放回缓存中。

这一模式可确保缓存中始终存储着最新的数据。

(1)添加应用程序数据缓存对象

应用程序数据缓存由System.Web.Caching.Cache类实现。

与Session对象类似,Cathe类提供了简单的字典接口。

可以通过该接口使用键/值对的形式,对需要缓存的对象实施缓存。

同时,还可以设置缓存的有效期、依赖项和优先级等特性。

采用这种方式的最大优点是易于使用和管理,这对于开发人员处理应用程序数据缓存有着重大意义。

添加应用程序数据缓存对象,实

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1