页输出缓存

简介:
< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>
页输出缓存输出缓存是一种功能强大的技术,它通过缓存从动态页生成的内容来提高请求/响应的吞吐量。默认情况下启用输出缓存,但不缓存来自任何给定响应的输出,除非采取显式操作使该响应成为可缓存的。

若要使响应满足输出缓存的条件,它必须具有有效的过期/有效性策略和公共的缓存可见性。这可通过使用低级别的 OutputCache API 或高级别的 @ OutputCache 指令来实现。 启用输出缓存后,当发出对页的第一个 GET 请求时创建一个输出缓存项。随后的 GET 或 HEAD 请求由该输出缓存项服务,直到该缓存请求过期。

输出缓存还支持缓存的 GET 或 POST 名称/值对的变体。

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

下面的示例说明用 @ OutputCache 指令输出缓存响应的简单方法。此示例仅显示生成响应的时间。若要查看输出缓存的运行情况,请调用该页并注意生成响应的时间。然后刷新该页并注意原来的时间没有更改,表明输出缓存正在为第二个响应服务。

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

<%@ OutputCache Duration="60" VaryByParam="none"%>此指令仅指示页应缓存 60 秒,而且页不随任何  GET  或  POST  参数改变。在该页仍被缓存时接收到的请求由缓存服务。60 秒后,从缓存中移除该页;将显式处理下一个请求并再次缓存页。

当然,在上例中,输出缓存几乎没有省去任何工作。下面的示例显示相同的输出缓存技术,但查询一个数据库并将结果显示在网格中。

在最后的示例中,对应用程序做了轻微的修改,使用户可以有选择地查询各个州的作者。此示例说明如何使用 @ OutputCache 指令的 VaryByParam 属性,缓存随查询字符串中的名称/值对值变化的请求。

<%@ OutputCache Duration="60" VaryByParam="state" %>对于数据集中的每个州,都有一个将所需的州作为查询字符串的一部分进行传递的链接。应用程序然后构造合适的数据库查询,并显示仅属于选定州的作者。

注意,当您第一次单击给定州的链接时,它在页的底部生成一个新的时间戳。此后,每当在一分钟内重新提交对该州的请求时,都会得到原来的时间戳,表示该请求已被缓存。

应用程序若要更多地控制与缓存相关的 HTTP 标头,可使用 System.Web.HttpCachePolicy 类提供的功能。下面的示例显示等效于上例中使用的页指令的代码。

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))Response.Cache.SetCacheability(HttpCacheability.Public) Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));Response.Cache.SetCacheability(HttpCacheability.Public); C# VB JScript

若要使之成为变化的过期策略(即每次请求页时都重新设置过期时间),请按以下代码所示来设置SlidingExpiration 属性。

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));Response.Cache.SetCacheability(HttpCacheability.Public);Response.Cache.SetSlidingExpiration(true); Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))Response.Cache.SetCacheability(HttpCacheability.Public)Response.Cache.SetSlidingExpiration(True) Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));Response.Cache.SetCacheability(HttpCacheability.Public);Response.Cache.SetSlidingExpiration(true); C# VB JScript

注意:启用变化的过期后 (SetSlidingExpiration(true)),对原服务器的请求总是会生成一个响应。在下游缓存可满足客户端请求(缓存中的内容尚未过期)而无须从原服务器请求内容的情况下,使用变化的过期时间是很有用的。

从 ASP 移植过来的应用程序可能已用 ASP 属性设置了缓存策略;例如:

Response.CacheControl = "Public";Response.Expires = 60; Response.CacheControl = "Public"Response.Expires = 60 Response.CacheControl = "Public";Response.Expires = 60;C# VB JScript

这些属性受 ASP.NET 的支持,并且具有同已显示的其他示例相同的作用。

本节小结
  1. 输出缓存技术缓存由 ASP.NET 页生成的内容。
  2. 除非页具有有效的过期时间或有效性策略和公共的缓存可见性,否则不将其放入输出缓存。
  3. 本文转自 netcorner 博客园博客,原文链接:http://www.cnblogs.com/netcorner/archive/2007/06/23/2912352.html  ,如需转载请自行联系原作者
相关文章
|
6月前
|
缓存 关系型数据库 MySQL
【为什么写缓冲区 仅适用于非唯一普通索引页】
【为什么写缓冲区 仅适用于非唯一普通索引页】
|
11月前
|
存储 SQL 缓存
分页列表缓存,你真的会吗
开源中国的红薯哥写了很多关于缓存的文章,其中多级缓存思路,分页列表缓存这些知识点给了我很大的启发性。 写这篇文章,我们聊聊分页列表缓存,希望能帮助大家提升缓存技术认知。
分页列表缓存,你真的会吗
|
存储 程序员 内存技术
4.1页式存储
计算机组成原理之页式存储
116 0
|
缓存 Linux
缓存区的刷新及配置
缓存区的刷新及配置
138 0
分页数/未分页 占用内存高日志收集排查方案
任务管理器看到内存占用高,内存占用主要是分页或未分页(windows 2012 之后显示是页面/非页面缓冲池)。
分页数/未分页 占用内存高日志收集排查方案
|
缓存 索引
页面片段缓存(二)
  在上一篇文章中,我介绍了我们用土法炼钢的方法,使用Velocity提供的自定义标签实现片段缓存。这样的方式虽然也解决了我们的问题,但还是引出了一些bug。而且还有点hack的味道(虽然我喜欢hack)。
1038 0
|
缓存 前端开发
页面片段缓存(一)
  一般,页面上会分为很多部分,而不同的部分更新的频率是不一样的。如果对整个页面采用统一的缓存策略则不太合适,   而且很多系统的页面左上角都有一个该死的“Welcome XXX”。这种特定于用户的信息我们是不能缓存的。
764 0
|
缓存
flush()清空文件缓存区
# 缓冲区:cpu 一级缓存 二级缓存 三级缓存 import time f =open('2.txt','a+' ,encoding='utf-8') f.write('helloworld\n') f.
1137 0
|
关系型数据库 MySQL Linux
解读InnodDB页面--普通页结构
前言 很久之前了解到innodb_space,觉得很强大,可视化了InnoDB页面,但是没有形成文档,总结出来,有一些经常被问到的东东可以用这个查看了。 环境 centos 7 Linux izhp3j8nb7nyq2g923r9fvz 3.
2322 0