OutputCache的使用

一 概念

缓存的分类:

       客户端缓存 (Client Caching)

       代理缓存  (Proxy Caching)

       反向代理缓存 (Reverse Proxy Caching)

       服务器缓存(Web Server Caching)

 

 使用缓存的好处:

     像css,js,image 等静态资源文件,变化不大的asp.net页面,在第二次访问时不需要再次请求服务端,而使用本地缓存的内容;

减少客户端对服务器资源请求的压力,加快客户端的响应速度;

OutputCache语法;

<% OutputCache Duration="#ofseconds"

      Location="Any|Client|Downstream|Server|none|ServerAndClient"

      Shared="True|False"

      VaryByControl="controlname"

      VaryByCustome="brower|Customstring"

      VaryByHeard="headers"

      VaryByParam="parametername"

      VaryByContentEncoding="encodings"

      CacheProfile="cache profile name"

      NoStroe="true|false"

      SqlDepedency="database/table name pair |CommandNotification"

      ProviderName="Provider Name"

%>

 (这些属性可以写在页面中,也可以写在配置文件件中的)

   接下来对每一参数进行讲解

    Duration:设置页或用户控件进行缓存的时间(以秒为单位),也就是过期时间;

    Location:OutputCacheLocation 的枚举之一。默认值为any。

    any:输出缓存可以位于 客户端浏览器,代理服务器,web服务器 的任何一个

    Client:缓存位于客户端浏览器上。

    Downstream:输出缓存可以存储在任何http1.1 可缓存设备中,源服务器除外!这包括代理服务器和发出请求的客户端。

    None:禁用输出缓存。

    server:缓存位于web服务器上。

    ServerAndClient:客户端和web服务器都可以缓存,代理服务器不可以

CacheProfile:与该页关联的缓存设置的名称。这是可选特性,默认值为空字符串 ("")

NoStore:一个布尔值,它决定了是否住址铭感的二级信息。

ProviderName:一个字符串值,标识要使用的自定义输出缓存的提供程序;

Shared:一个布尔值,确定用户控件是否可以由多个页共享,默认值为false

SqlDependency:标识一组数据库、表名称对字符串值,页或者控件的输出缓存的依赖的这些名称对,请注意,SqlCacheDependency 类监视输出缓存所依赖的数据库中的表,因此当更新表中的项时,使用基于表的轮询时将从缓存中移除这些项。如果以值 CommandNotification: 使用通知(在 Microsoft SQL Server 2005 中),则最终会使用 SqlDependency 类向 SQL Server 2005 服务器注册查询通知。

VaryByCustom:任何表示自定义输出缓存要求的额文本,如果特性复制为browser,缓存将随浏览名称和主板信息的不同

而异,如果输入的是自定义字符串,则必须在应用程序, Global.asax 文件中重写 GetVaryByCustomString 方法。

VaryByHeader:分号隔开的http表头列表,

VaryByHeader: 分号分隔的 HTTP 标头列表,用于使输出缓存发生变化。将该特性设为多标头时,对于每个指定标头组合,输出缓存都包含一个不同版本的请求文档。

VaryByParam: 分号分隔的字符串列表,用于使输出缓存发生变化。默认情况下,这些字符串对应于使用 GET 方法特性发送的查询字符串值,或者使用 POST 方法发送的参数。将该特性设置为多个参数时,对于每个指定参数组合,输出缓存都包含一个不同版本的请求文档。可能的值包括 none、星号 (*) 以及任何有效的查询字符串或 POST 参数名称。

VaryByControl:分号分隔的字符串列表,用于改变用户控件的输出缓存。这些字符串代表用户控件中声明的 ASP.NET 服务器控件的 ID 属性值。

VaryByContentEncodings: 以分号分隔的字符串列表,用于更改输出缓存。将 VaryByContentEncodings 特性用于 Accept-Encoding 标头,可确定不同内容编码获得缓存响应的方式。有关如何指定 Accept-Encoding 标头的更多信息,请参见 W3C 网站上的 Hypertext Transfer Protocol -- HTTP/1.1(超文本传输协议 -- HTTP/1.1)规范的 14.3 节。

 

 

----接下来,我们一一的解释和使用这些参数;来达到不同的效果。

----配置文件

   <system.web>    

<caching>
          <outputCacheSettings>
                  <outputCacheProfiles>
                          <!--name :缓存配置名称;
                              duration 缓存配置的时间(以秒为单位)
                             enable 指定缓存有效-->
                    <add name="testCache" duration="120" enabled="true" varyByParam="*"/>
                  </outputCacheProfiles>
             </outputCacheSettings>
      </caching>
</system.web>

 

页面中使用:

<%@ OutputCache CacheProfile="testCache"  %>

VaryByParam属性
分号分开的字符串列表,用于输出缓存发生变化;
具体的说就是根据?后面的参数 来决定是否输出缓存
还是发送新的页

varyByParam="none" 当 VaryByParam 设置为 none 时,将不考虑任何参数;无论提供什么附加参数,都将向所有用户发送相同的页(也就是缓存)

varyByParam="*" 就是任何形式的参数都改变,都发送新的页,而不使用缓存。

也可以指定某些特定的参数发生变化时,而发送新的页;
如:www.shopping/index?id=1&other=2

设置为:VaryByParam="id" id 发生变化,就发送新的页
设置为:VaryByParam="id;other"   id,other 发生变化,就发送新的页
 
location 属性
outputCacheLocation 枚举值之一。
Any:输出缓存可位于产生请求的浏览器客户端、参与请求的代理服务器(或任何其他服务器)或处理请求的服务器上。
 
先插播一点 http 的知识,(详细的看这里:http://www.shangxueba.com/jingyan/103345.html)

   缓存中存储的不仅仅是网页,还有服务器发过来的 该文件的最后 服务器修改时间。

   If-Modified-Since 是标准的http请求头标签,发送http请求时候,

 把浏览器端缓存页面的最后修改时间 一起发到服务端去,服务器会把这个时间与服务器上的实际文件

的最后修改时间,进行比较,如果时间一致,那么返回304 ,客户端接到之后,就直接把本地缓存文 件显示到浏览器中。

      如果时间不一致,就返回HTTP状态码200和新的文件内容,客户端接到之后,会丢弃旧文件,把新文件 缓存起来,并显示到浏览器中。

 

---这个也是一个大的话题,要满满的整滴呀;

 

 

参考文献:http://www.cnblogs.com/woxpp/p/3973182.html

                    http://www.cnblogs.com/rush/archive/2012/06/30/2571438.html

转载于:https://www.cnblogs.com/mc67/p/4812332.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值