OutputCache緩存各參數的說明


Duration

緩存時間,以秒為單位,這個除非你的Location=None,可以不添加此屬性,其余時候都是必須的。

Location

Location當被設置為None時,其余的任何設置將不起作用

 Any——頁面被緩存在瀏覽器、代理服務器端和web服務器端;

     Client——緩存在瀏覽器;

     DownStream——頁面被緩存在瀏覽器和任何的代理服務器端;

     None——頁面不緩存;

     ServerAndClient——頁面被緩存在瀏覽器和web服務器端;

默認為Any 。

!該屬性不支持用戶控件(.ascx文件)中的@OutputCache指令。   

Shared

用來控制用戶控件輸出內容是否能夠被多個頁面共享。默認值為false。

!該屬性不支持ASP.NET頁面(.aspx文件)中的@OutputCache指令。

VaryByCustom

任何自定義輸出緩存的文字。如果將該屬性設置為browser,將會緩存多種的瀏覽器名稱與版本信息。當使用了自定義字符串之后,就必須在應用程序的Global.asax文件中對HttpApplication.GetVaryByCustomString成員進行重載。

VaryByHeader

多個不同輸出緩存所使用的HTTP響應頭信息,並且通過分號進行分隔。當設置為多個響應頭信息時,輸出緩存將會為每個已指定的頭信息緩存多個不同版本的響應文檔。

  Accept-Language——代表請求頁面中用戶最希望的有優先級順序的人類語言列表;

     User-Agent——代表請求頁面設備的類型;

     Cookie——代表當前域名下創建的瀏覽器的cookie。項。

用戶控件中的@OutputCache指令不支持該屬性。

例如:設置VaryByHeader="Accept-Language"

當網站有多種語言版本時,可以為每種語言都進行緩存

可以更改IE的語言設置:IE—>工具àInternet選項à常規à語言來查看效果

 

VaryByParam

用於多個輸出緩存的字符串列表,並以分號進行分隔。默認時,該字符串與GET方法傳遞的參數或與POST方法傳遞的變量相對應。當被設置為多個參數時,輸出緩存將會為每個參數都准備一個與之相對應的文檔版本。可能值包括none,*,以及任何有效的查詢串或POST參數名稱。

如果您不想要為不同的已緩存內容指定參數,可以將其設置為none。如果想要指定所有的已緩存內容參數,可以設置為*。

例如:

如果命令設置為:

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

 

當請求路徑 bitauto.com/test.aspx?ProductType=1發生時,會建立緩存

當ProductType的值變為2時,系統會建立新的緩存,但是原來的緩存在有效期內並不會失效。相當於為不同的ProductType值建立了不同版本的緩存。如果熟悉.Net數據緩存的話,很類似於下面的用法。

Cache.Add(“productType1”,cachedObject)

Cache.Add(“productType2”,cachedObject)

 

VaryByControl

指定用戶控件的輸出緩存列表,並以分號作為分隔。字符串由被定義在用戶控件中的ASP.NET服務器端控件的ID屬性組成。

例如下面:根據頁面上下拉列表控件的選擇的值不同進行不同的緩存輸出

<%@ OutputCache Duration="100" VaryByControl="dropTest"%>

 

SqlDependency

         指定緩存失效的數據庫依賴項。可以具體到數據庫和表。

具體配置具體要經過幾個步驟:

1.       注冊連接池

命令:aspnet_regsql -S 192.168.30.220/SQL2K -U sa -P sa -ed -d pubs -et -t test專門注冊連接池的工具 在sql數據庫的數據 庫改變了,才改變緩存。

參數: _s 制定注冊的服務器
_u和 _p 說明是sql數據庫的授權模式、

     _d 指定數據庫的名字

_ed 說明緩存生效。

示例:

aspnet_regsql -S 192.168.30.220/SQL2K -U sa -P sa -ed -d pubs -et -t test

進行outputcache配置
<%@ OutputCache SqlDependency="pubs:test" Duration="100" VaryByParam="id"%>

2.       設置WebConfig       

<connectionStrings>

    <add         name="mySqlServer" connectionString="Server=192.168.30.220/SQL2K;Database=pubs;uid=sa;pwd=sa;"/>  </connectionStrings>

3.        

  <caching>

    <sqlCacheDependency enabled="true">

          <databases>

            <add

           

            connectionStringName="mySqlServer"

            pollTime="500" />

          </databases>

        </sqlCacheDependency>

 </caching>

name:必須是數據庫的名字

connectionStringName:連接字符串的名稱

除了可以建立數據庫依賴,還可以建立文件依賴或者其他依賴(可以看”參考文檔5”)。

        

CacheProfile

用於定義與該頁關聯的緩存設置的名稱。是可選屬性,默認值為空字符("")。需要注意的是,包含在用戶控件中的@ OutputCache指令不支持此屬性。在頁面中指定此屬性時,屬性值必須與Web.config文件<outputCacheSettings>配置節下的outputCacheProfiles元素中的一個可用項的名稱匹配。如果此名稱與配置文件項不匹配,將引發異常。

 

示例:

<%@ OutputCache CacheProfile="Cache30Seconds" %>

配置:

Web.config

<caching>

  <outputCacheSettings>

    <outputCacheProfiles>

      <add name="Cache30Seconds" duration="30"

        varyByParam="none" />

    </outputCacheProfiles>

  </outputCacheSettings>

</caching>

         Add節里面的各個屬性和OutPutCache相對應

注意OutputCache生命優先於outputCacheProfiles配置

比如:頁面緩存10s, outputCacheProfiles設置緩存20s,則最后緩存10s

NoStore

         bool值,用於決定是否阻止敏感信息的二級存儲,默認值為 false

 

DiskCacheable

   在.Net   2.0被遺棄

注:標紅的是經常用的屬性。

 

UserControl和Page中各命令參數比較(空 表示不支持)

 

簡單介紹

Control

Page

Duration

緩存時間

支持

支持

Location

存儲位置

 

支持

Shared

多頁面共享

支持

 

VaryByParam

隨參數改變

支持

支持

VaryByControl

隨控件改變?

支持

 

VaryByHeader

Http協議頭

 

支持

VaryByCustom

自定義改變值

支持

支持

SqlDependency

Sql依賴

支持

支持

CacheProfile

Cache配置節名稱

 

支持

NoStore

是否有其他存儲介質

 

支持

 

 

UserControl和Page中的一些區別:

1.作用范圍:UserControl為頁面局部的緩存,Page為頁面全部的緩存

2.優先級:      Page緩存優先級高於UserControl

例如:

UserControl :           <%@ OutputCache Duration="60"  VaryByParam="ProductType" %>

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

當ProductType =1改變時,Page緩存並不更新(UserControl並不更新)

如果Page去掉 OutputCache命令,則ProductType更新時,Page會更新(Control更新)

4.       頁面生命OutPutCahe緩存策略優先於后台代碼:

比如<%@ OutputCache  Duration="100" Location="Any" %>緩存100S

代碼:Response.Cache.SetExpires(DateTime.Now.AddMinutes(1));

結果緩存100秒

 

 

其他實現:

1.根據不同的語言緩存不同的版本:

 Response.Cache.SetExpires(DateTime.Now.AddMinutes(1));        Response.Cache.SetCacheability(HttpCacheability.Public);        Response.Cache.SetValidUntilExpires(true);

 Response.Cache.VaryByHeaders["Accept-Language"] = true;

2.文檔以來緩存:

    Response.AddFileDependency(Server.MapPath(Request.ApplicationPath + "/Web.Config"));

        Response.Cache.SetExpires(DateTime.Now.AddMinutes(1));

        Response.Cache.SetCacheability(HttpCacheability.Public);

參考文檔:

1.       ASP.NET 緩存:方法和最佳實踐

http://www.microsoft.com/china/MSDN/library/WebServices/ASP.NET/ASP.NETCaching-TechniquesandBestPractiCEs.mspx?mfr=true

2.       數據緩存中頁面部分和用戶控件部分的說明
http://www.cnblogs.com/chenou/articles/603547.html

3.       ASP.NET緩存策略經驗談

http://www.cnblogs.com/imissherso/articles/635563.html

4.       ASP.NET 2.0的頁面緩存功能介紹
http://www.cnblogs.com/Joshualang/archive/2007/01/24/OutputCache.html

5.       移除用戶控件的輸出緩存(OutputCache)

http://www.cnblogs.com/Truly/archive/2006/10/12/527206.aspx

6.       P.NET 2.0 緩存技術 (原創)

http://www.cnblogs.com/ghd258/archive/2005/11/03/248896.html

7.       頁面輸出緩存

http://www.cnblogs.com/hide0511/archive/2006/10/21/535702.html

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM