ASP.NET 2.0快取
一、頁輸出快取
1.設定 ASP.NET 頁快取的兩種方式
1.1 以宣告方式設定 ASP.NET 頁的快取
以宣告方式設定 ASP.NET 頁的快取的方法是在頁中使用 @ OutputCache 指令,它的常用屬性如下:
程式程式碼
Duration:設定快取到期時間,單位:秒。
VaryByParam:可用來使快取輸出因查詢字串而異,多個查詢字元用分號隔開。
VaryByControl:可用來使快取輸出因控制值而異。
VaryByHeader:可用來使快取輸出因請求的 HTTP 標頭而異。
VaryByCustom:可用來使快取輸出因瀏覽器型別或您定義的自定義字串而異。
CacheProfile:結合配置檔案使用。
Location:設定頁的可快取性,值有Any,Client,Downstream,None,Server,ServerAndClient。
注:在使用 @ OutputCache 指令時,必須包括一個 VaryByParam 屬性,否則將出現分析器錯誤。如果不希望使用 VaryByParam 屬性提供的功能,請將它的值設定為“None”。
@ OutputCache 指令使用示例
①使用引數對頁的各個版本進行快取:
程式程式碼
注:如果要根據多個引數改變輸出快取,請包括以分號 (;) 作為分隔符的引數名稱的列表;如果要根據所有的引數值來改變快取,請將VaryByParam 屬性設定為星號 (*);如果不要根據引數值來改變快取,請將 VaryByParam 屬性設定為"None"。
②使用 HTTP 標頭對某頁的各個版本進行快取:
程式程式碼
注:如果要根據多個標頭改變快取的內容,請以分號 (;) 作為分隔符包括標頭名稱的列表;如果要根據所有標頭值改變快取的內容,請將VaryByHeader 屬性設定為星號 (*)。
③使用請求瀏覽器快取頁的各個版本:
程式程式碼
④使用自定義字串對頁的各個版本進行快取:
程式程式碼
注:還要在應用程式的 Global.asax 檔案中,重寫 GetVaryByCustomString 方法以指定自定義字串的輸出快取行為。參考:http://msdn2.microsoft.com/zh-cn/library/5ecf4420(VS.80).aspx
⑤結合配置檔案:
將以下 XML 新增為 system.web 元素的子項:
程式程式碼
<!-- caching section group -->
@ OutputCache 指令:
程式程式碼
使用這種方法我們可以從單個配置檔案更改快取行為,而無需編輯各個頁面的 @ OutputCache 指令,並且還可以根據需要建立不同的快取規則,再應用到各組單獨頁面中。
1.2 以程式設計方式設定 ASP.NET 頁的快取
以程式設計方式設定 ASP.NET 頁的快取的方法是在頁的程式碼中,呼叫 Response 物件的 Cache 屬性:
程式程式碼
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); //設定快取過期時間
Response.Cache.SetCacheability(HttpCacheability.Public); //設定頁的可快取性
Response.Cache.SetValidUntilExpires(true); //快取忽略 Cache-Control 無效標頭
使用示例
①使用引數對頁的各個版本進行快取:
程式程式碼
protected void Page_Load(object sender, EventArgs e)
{
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);
Response.Cache.VaryByParams["Zip"] = true;
}
注:如果要根據多個引數改變快取的內容,請多次設定 VaryByParams 屬性。
②使用 HTTP 標頭對某頁的各個版本進行快取:
程式程式碼
protected void Page_Load(object sender, EventArgs e)
{
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);
Response.Cache.VaryByHeaders["Accept-Language"] = true;
}
注:如果要根據多個標頭改變快取的內容,需要在 VaryByHeaders 屬性中設定多個值。如果要根據所有標頭改變快取的內容,請將VaryByHeaders["VaryByUnspecifiedParameters"] 設定為 true。
③使用請求瀏覽器快取頁的各個版本:
程式程式碼
protected void Page_Load(object sender, EventArgs e)
{
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);
Response.Cache.SetVaryByCustom("browser");
}
④使用自定義字串對頁的各個版本進行快取:
程式程式碼
protected void Page_Load(object sender, EventArgs e)
{
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);
Response.Cache.SetVaryByCustom("minorversion");
}
說明:要在應用程式的 Global.asax 檔案中,重寫 GetVaryByCustomString 方法以指定自定義字串的輸出快取行為。
2.頁輸出快取的幾種模型
2.1 整頁快取:當設定 ASP.NET 頁快取的位置發生在頁面上時,即是整頁快取。
2.2 部分頁快取(控制元件快取):當設定 ASP.NET 頁快取的位置發生在使用者控制元件上時,即是控制元件快取。
2.3 部分頁快取(快取後替換):在整個快取的頁面上以宣告方式使用 Substitution 控制元件或以程式設計方式使用 Substitution 控制元件 API 或以隱式方式使用 AdRotator 控制元件,即是採用了快取後替換。
快取後替換舉例(以宣告方式使用 Substitution 控制元件)
aspx程式碼:
程式程式碼
aspx.cs程式碼:
程式程式碼
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
}
protected static string NoCache(HttpContext context)
{
return DateTime.Now.ToString();
}
說明:Substitution 控制元件的 MethodName 屬性值為一個方法的名稱(本例為NoCache),對該方法的要求是它接受的引數型別必須為HttpContext且返回值型別為string,而且還必須為靜態方法!
二、應用程式快取
1.建立
方法1:Cache["CacheName"] = "CacheValue";
方法2:Cache.Insert(String key,object value,System.Web.Caching.CacheDependency dependencies,DateTime absoluteExpiration,TimeSpan slidingExpiration,System.Web.Caching.CacheItemPriority priority,System.Web.Caching.CacheItemRemovedCallback onRemoveCallback);
方法3:Cache.Add(String key,object value,System.Web.Caching.CacheDependency dependencies,DateTime absoluteExpiration,TimeSpan slidingExpiration,System.Web.Caching.CacheItemPriority priority,System.Web.Caching.CacheItemRemovedCallback onRemoveCallback);
Add方法和Insert方法的區別是Add 方法將返回您新增到快取中的物件。另外,如果使用 Add 方法,並且快取中已經存在與現有項同名的項,則該方法不會替換該項,並且不會引發異常。
建立示例
①通過使用 Insert 方法將項新增到快取中:
程式程式碼
Cache.Insert("CacheItem2", "Cached Item 2");
②通過指定依賴項向快取新增項:
程式程式碼
string[] dependencies = { "CacheItem2" };
Cache.Insert("CacheItem3", "Cached Item 3",new System.Web.Caching.CacheDependency(null, dependencies));
③將設有過期策略的項新增到快取中:
程式程式碼
Cache.Insert("CacheItem6", "Cached Item 6",null, DateTime.Now.AddMinutes(1d), System.Web.Caching.Cache.NoSlidingExpiration);
④將設有優先順序設定的項新增到快取中:
程式程式碼
Cache.Insert("CacheItem8", "Cached Item 8",
null, System.Web.Caching.Cache.NoAbsoluteExpiration,
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.High, null);
2.檢索
程式程式碼
string cachedString;
cachedString = (string)Cache["CacheItem"];
if (cachedString == null)
{
cachedString = "Www.Mzwu.Com";
Cache.Insert("CacheItem", cachedString);
}
注:由於快取中所儲存的資訊為易失資訊,即該資訊可能由 ASP.NET 移除,因此建議的開發模式是首先確定該項是否在快取中。如果不在,則應將它重新新增到快取中,然後檢索該項。
3.移除
程式程式碼
Cache.Remove("MyData1");
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-620524/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ASP.NET 2.0中的頁面輸出快取ASP.NET快取
- Asp.Net MVC 快取ASP.NETMVC快取
- ASP.Net快取總結ASP.NET快取
- ASP.NET Core - 快取之分散式快取ASP.NET快取分散式
- ASP.NET Core 中的快取ASP.NET快取
- ASP.NET快取的方法分析ASP.NET快取
- ASP.NET清除頁面快取ASP.NET快取
- ASP.NET Core - 快取之記憶體快取(上)ASP.NET快取記憶體
- ASP.NET Core - 快取之記憶體快取(下)ASP.NET快取記憶體
- ASP.NET的快取依賴機制-SQL快取依賴篇ASP.NET快取SQL
- 【張逸】ASP.NET:效能與快取ASP.NET快取
- asp.net輸出快取的使用ASP.NET快取
- ASP.NET使用Redis共享快取示例ASP.NETRedis快取
- Redis 入門與 ASP.NET Core 快取RedisASP.NET快取
- 【張逸】ASP.NET:效能與快取[續]ASP.NET快取
- ASP.NET快取:方法和最佳實踐ASP.NET快取
- C# ASP.NET系統快取全解析C#ASP.NET快取
- ASP.NET快取:方法和最佳實踐 (轉)ASP.NET快取
- .net 溫故知新【14】:Asp.Net Core WebAPI 快取ASP.NETWebAPI快取
- ASP.NET快取概念及其應用淺析ASP.NET快取
- 快取穿透、快取擊穿、快取雪崩、快取預熱快取穿透
- 快取穿透、快取擊穿、快取雪崩快取穿透
- 快取穿透、快取雪崩、快取擊穿快取穿透
- Redis快取擊穿、快取穿透、快取雪崩Redis快取穿透
- HTTP快取——協商快取(快取驗證)HTTP快取
- [Redis]快取穿透/快取擊穿/快取雪崩Redis快取穿透
- ASP.NET Core 使用 Redis 和 Protobuf 進行 Session 快取ASP.NETRedisSession快取
- ASP.NET Web API通過ActionFilter來實現快取ASP.NETWebAPIFilter快取
- 【K!ngZ】ASP.NET快取:方法分析和實踐示例ASP.NET快取
- ASP.NET Web API實現快取的2種方式ASP.NETWebAPI快取
- ASP.NET Web API中通過ETag實現快取ASP.NETWebAPI快取
- 快取穿透 快取雪崩快取穿透
- 快取問題(一) 快取穿透、快取雪崩、快取併發 核心概念快取穿透
- 快取穿透、快取擊穿、快取雪崩區別快取穿透
- ASP.NET 2.0 加密 CookiesASP.NET加密Cookie
- 快取問題(四) 快取穿透、快取雪崩、快取併發 解決案例快取穿透
- ServiceWorker 快取與 HTTP 快取快取HTTP
- mybatis快取-二級快取MyBatis快取