關於緩存

日誌

關於緩存

編輯 | 刪除 | 權限設置 | 更多
更多
  • 設置置頂
  • 推薦日誌
  • 轉爲私密日誌
煙這東西    發表於2009年11月26日 11:37 閱讀(24) 評論(0) 分類: 個人日記 權限: QQ好友可見

 
頁面緩存
使用OutputCache指令。
<%@ OutputCache Duration="3600"
               Location="Any"
               VaryByCustom="browser"
               VaryByParam="RequestID" %>
其中Duration和VaryByParam特性是必須的。
 
Location控制頁面緩存的位置
Location 含義
Any 默認值。意味着頁面的輸出可以緩存在客戶端瀏覽器,緩存在任何“下游”的客戶端(如代理服務器),或緩存在Web服務器本身
Client 指明輸出緩存只能存儲在發出請求的客戶端(即瀏覽器)的本地緩存中
Downstream 指明輸出緩存能存儲在任何支持HTTP1.1緩存的設備(如代理服務器)中
Server 指明輸出緩存將存儲在Web服務器上
None 指明該頁面禁用輸出緩存

 
Duration允許我們控制頁面在緩存中生存的時間(單位是秒)
 
VaryByParam允許我們緩存頁面的不同版本。在上面的例子中,VaryByParam設爲了RequestID,所以ASP.NET使用RequestID參數的不同值,這些值或者是在HTTP GET的查詢字符串中傳入,或者是在HTTP POST的參數中傳入。可以通過檢查RequestID參數的值讓應用程序區分不同的用戶;通過在頁面的OutputCache指令中放置VaryByParam="RequestID",可以讓ASP.NET爲每個用戶緩存頁面的不同版本。
如果不想根據參數的值緩存頁面的不問版本,那麼只要把VaryByParam設爲none。
也可以要求ASP.NET爲每個可能的參數組合緩存頁面的一個版本。爲此,可把VaryByParam設爲*。
 
VaryByHeader和VaryByCustom特性與VaryByParam的相似之處在於,它們允許指定何時應創建頁面新的緩存版本。
VaryByHeader允許我們根據由分號分隔的HTTP頭的列表末緩存頁面的不向版本。
VaryByCustom當設爲browser時,允許我們根據瀏覽器的名稱和主版本信息緩存不同版本。也可以把它設爲一個自定義方法的名稱,從而實現我們自己的邏輯,控制緩存的版本。
 
片斷緩存
可以利用用戶控件將頁面分段,在ascx文件中寫入緩存的語句,而不在aspx文件中寫緩存語句,這樣ASP.NET就可以只緩存ascx片斷的輸出了。一般像頁眉或頁腳基本上都是一樣的,就不需要重新加載。但是如果其中有動態變化的數據就不能對其進行緩存,因爲一旦被緩存後程序就不會再創建它的實例來更新數據顯示,只有等到生存期過期才行,所以對於這種情況就不適於用頁面片斷緩存。
注意:
一、注意片段緩存不支持Location特性;緩存頁面片段惟一合法的地方是web服務器。這是因爲片段緩存在ASP.NET中是新的功能,所以瀏覽器和代理服務器不支持。
二、片段緩存有另外一個在頁面緩存中沒有的特性——VaryByControl。VaryByControl特性允許指定一個由分號分隔的字符串列表,代表用戶控件內使用的控件的名稱;ASP.NET將針對值的每個不同的組合生成用戶構件的一個緩存版本。
 
數據緩存
低級API是Cache類,它位於ASP.NET中的System.web.Caching命名空間,可以用它緩存生成很耗費資源的數據。Cache類的使用和Session與Application對象一樣簡單。每個應用程序只有一個Cache對象——這意味着使用Cache對象存儲在緩存中的數據是應用程序級別的數據。使事情更爲簡單的是,Page類的Cache屬性使應用程序的Cache對象實例能在代碼中使用。
通過Cache對象緩存的數據存儲在應用程序的內存中。這意味着該數據的生存期不會超過應用程序的重啓(事實上,這和存儲在Application與Session對象中的數據一樣,除非使用StateService或SQL State會話模式存儲Session數據)。
具體的使用和語法與Session和Application一樣。轉換回來的時候需要注意對其進行相應類型的強制類型轉換。
 
這不是在ASP.NET緩存中添加緩存項的惟一方式。Cache對象有兩個方法Insert()方法和Add()方法,它們靈活性更高。它們的用法近似,但稍有不同:
Insert()方法用於覆蓋ASP.NET緩存中現有的緩存項。
Add()方法只用於在ASP.NET緩存中添加新的緩存項(如果用它覆蓋現有的緩存項,則會失敗)。
每個方法都有7個參數,而且兩個方法的參數相同。
在緩存某一項時,可以指定它的相關性,告訴ASP.NET該緩存項在緩存中一直保留到某個事件發生時爲止。
相關性值 含義
CacheDependency 允許指定一個文件或緩存鍵。如果文件發生變化,對象就被刪除。如果緩存鍵發生變化,對象也被刪除。
DateTime 這是一個DataTime值,指明緩存數據過期的時間(絕對過期時間)
TimeSpan 這是一個時間間隔,指明緩存數據在上一次訪問後可以在緩存中保留多長時間(彈性過期時間)

使用CacheItemPriority來指定緩存數據的優先級,以便在緩存被填滿的時候刪除那些優先級低的數據。
優先級值 含義
High 設爲此優先級的緩存項是最不可能在內存不足時被刪除的
AboveNormal 設爲此優先級的緩存項比優先級爲Normal或以下的緩存項更優先保留
Normal 設爲此優先級的緩存項比優先級爲BelowNormal和Low的緩存項更優先保留
BelowNormal 這是倒數第二級的優先級;設爲此優先級的緩存項只比優先級設爲Low的緩存項更優先保留
Low 設爲此優先級的緩存項是最有可能在內存不足時被刪除的
Default 緩存項的優先級的默認值是Normal
NotRemovable 當緩存項設爲此優先級時,是在告訴ASP.NET即使是內存不足,也不要從緩存中刪除它

DateTime dt = new DateTime(DateTime.Now.Year,12,31);
Cache.Add("MembersDataSet",dsMembers,null,
dt,TimeSpan.Zero,
CacheItemPriority.Normal,null);
第一個參數是引用緩存對象的鍵,第二個參數是要緩存的對象。第三個參數是null(表明沒有相關性)。
第四和第五個參數是絕對的過期時間和彈性的過期時間。這裏,我們指定緩存應在當前年份的最後一天過期(dt)。我們想指定沒有彈性的過期時間,所以第五個參數使用TimeSpan.Zero。第六個參數使用System.Web.Caching.CacheItemPriority枚舉中的一個值,把優先級設爲Normal。
 
指定一個5分鐘的彈性過期時間,沒有指定絕對過期時間
Cache.Add("MembersDataSet",dsMembers,null,
                DateTime.MaxValue,TimeSpan.FromMinutes(5),
            CacheItemPriority.Normal,null);
 
添加一個相關性。在這個例子中,過期時間也取決於一個文件的修改,即test.xml文件:
CacheDependency dep = new CacheDependency(@"C:/test.xml");
Cache.Add("MembersDataSet",dsMembers,dep,
                DateTime.MaxValue,TimeSpan.FromMinutes(5),
            CacheItemPriority.Normal,null);
 
過期時間取決於緩存中另一項的修改:
String[] dependencyKeys = new String[1];
dependencyKeys[0] = "MembersChanged";
CacheDependency dependency = new CacheDependency(null, dependencyKeys);
Cache.Add("MembersDataSet",dsMembers,dependency,
                DateTime.MaxValue,TimeSpan.Zero,
            CacheItemPriority.Normal,null);
 
最後一個參數是CacheItemRemovedCallback類型的,允許我們在緩存項從緩存中刪除時要求通知,可以編寫一個自定義的方法(像這裏的ItemRemovedCallback()方法),然後在第7個參數中指定該方法:
        public void ItemRemovedCallback(String key, Object value, CacheItemRemovedReason reason)
        {
        }
 
Cache.Add("MembersDataSet",dsMembers,dependency,
                DateTime.MaxValue,TimeSpan.FromMinutes(5),
            CacheItemPriority.Normal,
new CacheItemRemovedCallback(this.ItemRemovedCallback));
第一個參數是在緩存中存儲緩存項時使用的鍵,第二個是存儲的對象本身,第三個是緩存項刪除的原因

本文來自CSDN博客,轉載請標明出處:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章