Durationhtml
緩存時間,以秒爲單位,這個除非你的Location=None,能夠不添加此屬性,其他時候都是必須的。web
Locationsql
Location當被設置爲None時,其他的任何設置將不起做用數據庫
Any——頁面被緩存在瀏覽器、代理服務器端和web服務器端;瀏覽器
Client——緩存在瀏覽器;緩存
DownStream——頁面被緩存在瀏覽器和任何的代理服務器端;服務器
None——頁面不緩存;cookie
ServerAndClient——頁面被緩存在瀏覽器和web服務器端;ssh
默認爲Any 。ide
!該屬性不支持用戶控件(.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