緩存主要是為了提高數據的讀取速度。因為服務器和應用客戶端之間存在著流量的瓶頸,所以讀取大容量數據時,使用緩存來直接為客戶端服務,可以減少客戶端與服務器端的數據交互,從而大大提高程序的性能。
本章從緩存所在的命名空間“System.Web.Caching”開始,詳細介紹框架提供的緩存類和操作方法,主要涉及簡單數據的緩存、數據緩存依賴和數據庫緩存依賴三個技術要點,最後演示一個完全使用緩存實現數據讀取的實例。講解流程如圖16-1所示。
圖16-1 緩存命名空間的講解流程
本節從緩存命名空間的總體簡介和組成結構入手,從整體上對System.Web.Caching進行概述。
System.Web.Caching是用來管理緩存的命名空間。緩存就是將服務器端的數據暫時保存在客戶端,方便用戶的讀取。緩存命名空間的父級空間是“System.Web”,由此可以看出,緩存通常用於Web網站的開發,包括在B/S項目中的開發。緩存的設計主要是考慮到網絡帶寬可能會延緩數據的提交和回發,如果將數據保存在客戶端,用戶可以直接從客戶端讀取數據,這樣數據就是從本地提取的,不會再受網絡的影響。
System.Web.Caching命名空間提供與緩存有關的所有操作類,具體包括哪些類將在下一節詳細介紹。
緩存命名空間主要提供三種操作:緩存數據對象、對象的緩存依賴和數據庫的緩存依賴。其中緩存任何對象都使用一個類Cache,但當緩存發生改變時,普通對象和數據庫對象的依賴處理不同。
圖16-2羅列的是在三層結構中緩存的部署情況。兩個依賴類CacheDependency和SqlCache Dependency主要更改發生變化的緩存數據,起到通知的作用。當數據沒有被緩存時,使用Cache類進行添加。
下面根據圖16-2的部署,來介紹圖中使用的緩存類。這些類的說明如表16-1所示。
圖16-2 三層結構中緩存的部署圖
表16-1 緩存命名空間中的類及其說明
類 名
說 明
Cache
對緩存對象的編輯類,其操作包括緩存的增、刪、改
CacheDependency
基本緩存對象的依賴,當基本對象發生變化時,更新緩存內容
SqlCacheDependency
數據庫緩存對象的依賴,當數據庫中的數據變化時,更新緩存內容
Cache類用來存儲數據對象,並提供方法對這些對象進行編輯。本節主要介紹Cache類包含的方法,以及如何使用這些方法實現數據對象的緩存。
Cache類屬於字典類,其根據一定的規則存儲用戶需要的數據,這些數據的類型不受限制,可以是字符串、數組、數據表、Dataset和哈希表等。
使用Cache類的優點是當緩存的數據發生變化時,Cache類會讓數據失效,並實現緩存數據的重新添加,然後通知應用程序,報告緩存的及時更新。
Cache類的語法定義如下:
public sealed class Cache : IEnumerable
通過其定義可以發現,Cache類是“sealed”定義的類,表示此類被密封,不能被繼承。同時Cache類還繼承了IEnumerable接口,表示允許對集合中的數據進行枚舉操作。
緩存的生命周期隨著應用程序域的活動結束而終止,也就是說只要應用程序域依然處於活動狀態,緩存就會一直保持,因為每個應用程序域都會創建一個緩存實例。此實例的信息通過HttpContext對象的Cache屬性或Page對象的Cache屬性獲取。
下面的代碼演示如何將數組數據添加到緩存中:
ArrayList myarray = new ArrayList(); //創建數組數據
myarray.Add("1.學習園地");
myarray.Add("2.交流論壇");
myarray.Add("3.幫助");
Cache.Add("Category", myarray); //將數組添加到緩存中
Cache類的方法主要提供對緩存數據的編輯操作,如增、刪、改等。其中最常用的方法及其說明如表16-2所示。
表16-2 Cache類的主要方法及其說明
名 稱
說 明
Add
將數據添加到Cache對象
Insert
向Cache中插入數據項,可用於修改已經存在的數據緩存項
Remove
移除Cache對象中的緩存數據項
Get
從Cache對象中獲取指定的數據項,注意返回的是Object類型,需要進行類型轉換
GetType
從Cache對象中獲取數據項的類型,判斷數據類型後,方便進行轉換
GetEnumerator
循環訪問Cache對象中的緩存數據項。注意其返回類型是“IDictionaryEnumerator”
技巧:要想修改緩存數據,只需要重新為緩存賦值即可。
最需要注意的是Add方法,其使用語法如下:
public Object Add (
string key,
Object value,
CacheDependency dependencies,
DateTime absoluteExpiration,
TimeSpan slidingExpiration,
CacheItemPriority priority,
CacheItemRemovedCallback onRemoveCallback
)
在使用Add方法時,以上7個參數是必需的,其代表意義如下:
— 參數“key”代表緩存數據項的鍵值,必須是唯一的。
— 參數“value”代表緩存數據的內容,可以是任意類型。
— 參數“dependencies”表示緩存的依賴項,也就是此項的更改意味著緩存內容已經過期。如果沒有依賴項,可將此值設置為NULL。
— 參數“absoluteExpiration”是日期型數據,表示緩存過期的時間,.NET 2.0提供的緩存在過期後是可以使用的,能使用多長時間,就看這