緩存配置文件(Cache Profile )
web.config可以配置緩存相關(guān)的設(shè)置,
<system.web> <caching> <outputCacheSettings> <outputCacheProfiles> <addname="ProductItemCacheProfile" duration="60"/> </outputCacheProfiles> </outputCacheSettings> </caching> </system.web>
你可以通過(guò)設(shè)置 CacheProfile=”P(pán)rofileName” 屬性 來(lái)使用上面的配置:
<%@OutputCacheCacheProfile="ProductItemCacheProfile"VaryByParam="None"%>
2. 數(shù)據(jù)緩存(Data Caching)
ASP.NET還提供了另一種靈活的緩存類型:數(shù)據(jù)緩存。你可以將一些耗費(fèi)時(shí)間的條目加入到一個(gè)對(duì)象緩存集合中,以鍵值的方式存儲(chǔ)。
Cache["Name"] = data;
我們可以通過(guò)使用Cache.Insert()方法來(lái)設(shè)置緩存的過(guò)期,優(yōu)先級(jí),依賴項(xiàng)等。
date1 = DateTime.Now;Cache.Insert("Date1", date1, null, DateTime.Now.AddSeconds(20), TimeSpan.Zero);
ASP.NET允許你設(shè)置一個(gè)絕對(duì)過(guò)期時(shí)間或滑動(dòng)過(guò)期時(shí)間,但不能同時(shí)使用。
緩存依賴項(xiàng)Cache dependency
緩存依賴項(xiàng)使緩存依賴于其他資源,當(dāng)依賴項(xiàng)更改時(shí),緩存條目項(xiàng)將自動(dòng)從緩存中移除。緩存依賴項(xiàng)可以是應(yīng)用程序的 Cache 中的文件、目錄或與其他對(duì)象的鍵。如果文件或目錄更改,緩存就會(huì)過(guò)期。
date2 = DateTime.Now;
string[] cacheKeys = { "Date1"}; CacheDependency cacheDepn = newCacheDependency(null, cacheKeys); Cache.Insert("Date2", date2, cacheDepn);
上面的例子“Date2”緩存對(duì)象依賴“Date1”緩存條目,當(dāng) “Date1” 對(duì)象過(guò)期后“Date2” 將會(huì)自動(dòng)過(guò)期。CacheDependency(null, cacheKeys)中的第一個(gè)參數(shù)為空是由于我們只監(jiān)視緩存鍵的更改情況。
回調(diào)函數(shù)和緩存優(yōu)先級(jí)(Callback Method and Cache Priority) ASP.NET允許我們寫(xiě)一個(gè)回調(diào)函數(shù),當(dāng)緩存條目從緩存中移除的時(shí)候觸發(fā)。還可以設(shè)置緩存條目的優(yōu)先級(jí)。
protected void Page_Load(object sender, EventArgs e) { DateTime? date1 = (DateTime?)Cache["Date1"]; if (!date1.HasValue) // date1 == null { date1 = DateTime.Now; Cache.Insert("Date1", date1, null, DateTime.Now.AddSeconds(20), TimeSpan.Zero, CacheItemPriority.Default, new CacheItemRemovedCallback(CachedItemRemoveCallBack)); }
DateTime? date2 = (DateTime?)Cache["Date2"]; if (!date2.HasValue) // date2 == null { date2 = DateTime.Now; Cache.Insert("Date2", date2, null, DateTime.Now.AddSeconds(40), TimeSpan.Zero, CacheItemPriority.Default, new CacheItemRemovedCallback(CachedItemRemoveCallBack)); }
// Set values in labels lblDate.Text = date1.Value.ToShortDateString(); lblTime.Text = date1.Value.ToLongTimeString();
lblDate1.Text = date2.Value.ToShortDateString(); lblTime1.Text = date2.Value.ToLongTimeString();
}
private void CachedItemRemoveCallBack(string key, object value, CacheItemRemovedReason reason) { if (key == "Date1" || key == "Date2") { Cache.Remove("Date1"); Cache.Remove("Date2"); } }
例子中創(chuàng)建了“Date1” 和 “Date2”緩存!癉ate1” 在20秒后過(guò)期“Date2”為40秒。但是由于我們注冊(cè)了移除的回調(diào)函數(shù),當(dāng)“Date1” 或 “Date2”其中一個(gè)過(guò)期都會(huì)執(zhí)行CachedItemRemoveCallBack 方法,在這個(gè)方法中移除了兩個(gè)緩存條目,ASP.NET還提供了處理緩存條目更新時(shí)的回調(diào)函數(shù)CacheItemUpdateCallback 。
原文:http://kb.cnblogs.com/page/50971/
本文鏈接:http://www.95time.cn/tech/program/2009/7237.asp
出處:博客園
責(zé)任編輯:bluehearts
上一頁(yè) ASP.NET緩存 [2] 下一頁(yè)
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|