`
happmaoo
  • 浏览: 4310046 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

.NET Petshop详解(五):petshop输出缓存设置

阅读更多

ASP.NET的输出缓存<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

衡量高性能、可缩放的web应用程序最重要的一个指标就是缓存了。ASP.NET提供了高性能的web应用程序的缓存功能,ASP.NET 有三种可由 Web 应用程序使用的缓存:

· 输出缓存,它缓存请求所生成的动态响应。

· 片断缓存,它缓存请求所生成的响应的各部分。

· 数据缓存,它以编程方式缓存任意对象。为支持这种缓存,ASP.NET 提供了全功能的缓存引擎,使程序员能够轻松地在请求间保留数据。

页的输出缓存是非常有用的。在海量的访问站点中,有些页面的访问频率占了非常大的比重,即使对这些页使用输出缓存很少的时间,也会减轻系统不少的负担,因为后面对这些页面的请求将不在执行创建该页的代码。

但是,这样显得不够灵活,页的请求可能的确是很多,然而在页面上我们缓存了所有的东西,无论是构造成本高还是构造成本低的部分。能否有一种可以缓存页的部分的数据呢?幸运的是ASP.NET提供了针对每个请求来创建或自定义该页的各部分。比如说我们可以对页面上构造成本很高的用户控件做片断缓存。

ASP.NET 缓存支持文件和缓存键依赖项,使开发人员可以使缓存项依赖于外部文件或其他缓存项。此项技术可用于在项的基础数据源发生更改时使该项无效。 ASP.NET可以将这些项存储在 Web 服务器上或请求流中的其他软件上,例如代理服务器或浏览器。这可以使您避免重新创建满足先前请求的信息,特别是当在服务器上创建时要求大量处理器时间或其他资源的信息。

Petshop的页缓存设置

我们可以可通过使用低级别的 OutputCache API 或高级别的 @ OutputCache 指令来实现页的输出缓存。 启用输出缓存后,当发出对页的第一个 GET 请求时创建一个输出缓存项。随后的 GET HEAD 请求由该输出缓存项服务,直到该缓存请求过期。 输出缓存还支持缓存的 GET POST 名称/值对的变体。

输出缓存遵循页的过期和有效性策略。如果某页位于输出缓存中,并且有一个过期策略标记指示该页自缓存起 60 分钟后过期,则在 60 分钟后将该页从输出缓存中移除。如果此后接收到另一个请求,则执行页代码,并且可以再次缓存该页。

下面的指令在响应时激活输出缓存:

<%@ OutputCache Duration="60" VaryByParam="none"%>

DurationVaryByParam是必选参数,前者标识过期时间,后者表示GET POST 名称/值对的字符串。如果不使用该属性,可是设置为none。在这里我们还要说明一个参数VaryByCustom,使用这个参数,我们可以自定义输出缓存要求的任意文本。除了在OutputCache指令里面申明该属性之外,我们还得在应用程序的 global.asax 文件的代码声明块中,重写 GetVaryByCustomString 方法来为自定义字符串指定输出缓存的行为。

举一列来说:

<%@ OutputCache VaryByParam="none" VaryByCustom="CategoryPageKey" Location="server" Duration="43200" %>

这里的VaryByCustom定义的为CategoryPageKey,那么在global.asax里面我们必须定义CategoryPageKey这个字符创输出缓存的行为,见下面代码。

public override string GetVaryByCustomString(HttpContext context, String arg) {

string cacheKey = "";

switch(arg) {

case "CategoryPageKey":

if (Request.IsAuthenticated == true) {

cacheKey = "QQQ" + context.Request.QueryString["category_id"] + context.Request.QueryString["requestedPage"];

}

else {

cacheKey = "AAA" + context.Request.QueryString["category_id"] + context.Request.QueryString["requestedPage"];

}

break;

case "SearchPageKey" :

if (Request.IsAuthenticated == true) {

cacheKey = "QQQ" + context.Request.QueryString["search_text"] + context.Request.QueryString["requestedPage"];

}

else {

cacheKey = "AAA" + context.Request.QueryString["search_text"] + context.Request.QueryString["requestedPage"];

}

break;

case "ProductPageKey" :

if (Request.IsAuthenticated == true) {

cacheKey = "QQQ" + context.Request.QueryString["name"] + context.Request.QueryString["product_id"] + context.Request.QueryString["requestedPage"];

}

else {

cacheKey = "AAA" + context.Request.QueryString["name"] + context.Request.QueryString["product_id"] + context.Request.QueryString["requestedPage"];

}

break;

case "ProductDetailsPageKey" :

if (Request.IsAuthenticated == true) {

cacheKey = "QQQ" + context.Request.QueryString["item_id"] + context.Request.QueryString["requestedPage"];

}

else {

cacheKey = "AAA" + context.Request.QueryString["item_id"] + context.Request.QueryString["requestedPage"];

}

break;

case "UserID" :

if (Request.IsAuthenticated == true) {

cacheKey = "UserID_In";

}

else {

cacheKey = "UserID_Out";

}

break;

}

return cacheKey;

}

从上面对CategoryPageKey字符创所作的行为来看,当我们的请求页面中含有对特定的category_id的某一分页显示的数据页的请求时,将调用缓存(自然是已经缓存了该页)。

下表列出了petshop的web应用程序的输出缓存设置。

ASP.NET WebForms

Cache setting

Duration

ControlHeader

<%@ OutputCache

Duration="43200"

VaryByParam="none"

VaryByCustom="UserID" %>

12 hours

Default

<%@ OutputCache

Duration="43200"

VaryByParam="none"

VaryByCustom="UserID" %>

12 hours

Help

<%@ OutputCache

Duration="43200"

VaryByParam="none"

VaryByCustom="UserID" %>

12 hours

Category

<%@ OutputCache

Duration="43200"

VaryByParam="none"

VaryByCustom="CategoryPageKey " %>

12 hours

Product

<%@ OutputCache

Duration="43200"

VaryByParam="none"

VaryByCustom="ProductPageKey " %>

12 hours

ProductDetails

<%@ OutputCache

Duration="43200"

VaryByParam="none"

VaryByCustom="ProductDetailsPageKey " %>

12 hours

Search

<%@ OutputCache

Duration="43200"

VaryByParam="none"

VaryByCustom="SearchPageKey " %>

12 hours

显然petshopweb页面上部的ControlHeader是随着用户登陆的状态有关的,故其设置了VaryByCustom属性以来标识用户不同登陆状态的缓存版本。而Category页面由于可能被大量的访问,并且数据量很大,是十分有必要缓存的,但是由于数据的随机性很大,存在不同的版本,比如说是不同类别的Category,甚至不同的分页显示的数据页,在这里采用了VaryByCustom属性以缓存不同版本的页。

Petshop片断缓存

在前面我们提到ASP.NET可以提供页的局部数据的缓存,通常是一些构造代价较大的部分,诸如用户控件。在petshop里面,大量使用了用户控件(尤其是.NET示例程序Duwamish7.0使用了更多的用户控件,那些页面简直就是控件的拼装),用户控件的缓存设置方法和aspx页的缓存设置方法基本相同,在这里我们不再列出。只有ControlHeader控件使用了缓存设置,见上表。

分享到:
评论

相关推荐

    .net petshop非常详细的说明解释

    .net petshop非常详细的说明解释

    Net Petshop详解Word版

    Net Petshop详解(一): petshop概览和准备工作 Net Petshop详解(二): petshop三层结构之DataTier Petshop详解(三):petshop三层结构之MiddleTire ...Net Petshop详解(五):petshop输出缓存设置

    [PetShop] PetShop for .Net 3.5 源代码

    基于 .NET Framework 3.5 的 Petshop,使用 LINQ to SQL 改进数据访问层,使用 WCF 来提供RSS,并在 UI 层上做一些改进,如使用 ASP.NET AJAX,ListView 控件等; ☆ 文件清单:☆ PetShop for .Net 3.5 (Source ...

    Microsoft .NET PetShop4.0 详解[重新整理,清晰图]

    PetShop是一个范例,微软用它来展示.Net企业系统开发的能力。业界有许多.Net与J2EE之争,许多数据是从微软的PetShop和Sun的PetStore而来。这种争论不可避免带有浓厚的商业色彩,对于我们开发人员而言,没有必要过多...

    .NET PetShop购物程序

    .NET PetShop购物程序 

    asp.net 经典 petshop4.0+5.0

    微软展示企业开发的优秀范例 petshop4.0 基于 .net2.0。petshop5.0 基于.net3.5。petshop5.0 没有官方版本。

    .Net Petshop4.0及相关资料

    .net petshop4.0 三层结构的示例程序 安装 以及附带的三层结构相关资料

    Petshop4.0相关资料

    本资料包括: PETSHOP4.0全面分析 PETSHOP4.0详细分析 Petshop4.0详解.pdf ...Microsoft .Net Petshop详解一到五: petshop概览和准备工作.doc Microsoft .NET Pet Shop 4:将 ASP.NET 1.1 应用程序迁移到 2.0.doc

    asp.net 经典petshop (代码+ppt)

    PetShop版本为4.0。采用了.Net Framework 2.0和Asp.Net。 是一个很好的学习.Net设计的实例。

    .Net petshop 4.0+文档

    微软的分层架构,大家可以学习下...希望对菜鸟有帮助

    petshop4.0 详解之四(PetShop之ASP.NET缓存) .doc

    petshop4.0 详解之四(PetShop之ASP.NET缓存) .doc

    asp.net petshop 4.0

    petshop 不用我多说了吧,大家好好研究吧,里面有数据直接安装就行了

    《解剖PetShop》之四:PetShop之ASP.NET缓存

    四 PetShop之ASP.NET缓存  如果对微型计算机硬件系统有足够的了解,那么我们对于Cache这个名词一定是耳熟能详的。在CPU以及主板的芯片中,都引入了这种名为高速缓冲存储器(Cache)的技术。因为Cache的存取速度比...

    [源代码] .NET Pet Shop 4.0 (精校代码)

    The .NET Pet Shop application is designed to show the best practices for building enterprise, n-tier .NET 2.0 applications that may need to support a variety of database platforms and deployment ...

    dotnetcoding ORM 代码生成器

    现在此平台支持多种数据访问框架(三层框架, PetShop框架,工厂框架, WebServeice框架) 支持Windows , Web两种应用类型 支持VB.net , c#.Net两种开发语言 支持SqlServer, Oracle, Access等多种数据库, 并且支持用...

    asp.net PetShop系统演示(源码)

    对开发者和架构师都有所帮助,大家可以下去研究一下,不要急于求成,框架比较复杂,慢慢来,祝大家学习进步。

    C#.net三层架构初学者之petshop详解

    三层架构 初学者 petshop详解 petshop正版安装软件(2.1M) 本人在里面添加了4个学习petshop开发的详细步骤,以及数据库建立,以及怎样在vs2005中一步步教你怎么操作。是本人学习三层架构的经典资料。共享了,希望对...

    .net PetShop购物程序V1.5.2

    这是一套asp.net的网络购物系统,系统来源于国外,系统的运行需要.net支持环境,系统具备的功能很是强大。相当不错。解压密码:pengyouyi

    petshop4.0详解.pdf

    petshop4.0详解

Global site tag (gtag.js) - Google Analytics