ASP.NET 4中的可擴(kuò)展輸出緩存(可以緩存頁(yè)面/控件等)
ASP.NET 1.0引入輸出緩存的概念,這使得開發(fā)者可以緩存頁(yè)面、控件、控制器以及HTTP響應(yīng)的輸出到內(nèi)存中。在后續(xù)的Web請(qǐng)求,ASP.NET就可以使用緩存中的內(nèi)容更快響應(yīng)。
ASP.NET的輸出緩存系統(tǒng)足夠靈活,使得我們可以根據(jù)不同的查詢字符串或者表單post參數(shù)來(lái)緩存不同版本的內(nèi)容。例如test.aspx?category=Vegerable 和 test.aspx?category.aspx?category=Meat。它也允許我們根據(jù)瀏覽器類型或者用戶語(yǔ)言偏好來(lái)緩存不同版本的內(nèi)容。比如你可以為應(yīng)用的手機(jī)版本緩存一份數(shù)據(jù)而為桌面版本緩存另外一份。
我們也可以通過(guò)配置ASP.NET來(lái)為緩存項(xiàng)設(shè)置特定的緩存時(shí)間(如1分鐘)。我們也可以配置ASP.NET的緩存項(xiàng)根據(jù)外部事件動(dòng)態(tài)更新緩存(比如數(shù)據(jù)庫(kù)數(shù)據(jù)更新)。
但是ASP.NET V1到ASP.NET V3.5都只允許內(nèi)存緩存。
ASP.NET 4輸出緩存擴(kuò)展
ASP.NET 4擴(kuò)展了輸出緩存使得我們可以配置一個(gè)或多個(gè)輸出緩存provider(output cache providers)。輸出緩存provider可以使用任意存儲(chǔ)機(jī)制來(lái)持久化輸出緩存內(nèi)容。這使得我們可以把緩存內(nèi)容存在本地或者遠(yuǎn)程磁盤、數(shù)據(jù)庫(kù)、云端或者分布式緩存引擎中(如memcached或者velocity)。
我們可以通過(guò)集成ASP.NET中的System.Web.Caching.OutputCacheProvider類來(lái)定制自己的輸出緩存provider。然后我們重4個(gè)公共方法來(lái)實(shí)現(xiàn)添加/移除/檢索/更新緩存內(nèi)容(每一個(gè)緩存項(xiàng)都必須通過(guò)一個(gè)唯一的key來(lái)標(biāo)識(shí))。然后我們將這個(gè)自定制的輸出緩存provider注冊(cè)到web.config文件中,如下:

在上面,我添加了一個(gè)輸出緩存provider,名叫SampleCache,它由OutputCacheSample.dll程序集中的ScottOutputCache類實(shí)現(xiàn)。我同時(shí)也設(shè)置了ASP.NET的默認(rèn)輸出緩存provider為SampleCache,即通過(guò)上面的defaultProvider。
現(xiàn)在,每當(dāng)我在一個(gè)aspx頁(yè)面添加下面的指令,頁(yè)面內(nèi)容就會(huì)通過(guò)ScottOutputCache緩存:
<%@ OutputCache Duration="60" VaryByParam="None" %>類似的,如果我給一個(gè)action添加[OutputCache]屬性,內(nèi)容頁(yè)將通過(guò)ScottOutputCache緩存:
[OutputCache(Duration=60)]
public ActionResult Browse(string category)
{
return View();
}
定制使用哪個(gè)輸出緩存Provider
上面我只提供了一個(gè)默認(rèn)的SampleCache輸出緩存Provider。而開發(fā)人員實(shí)際上可以根據(jù)每個(gè)請(qǐng)求動(dòng)態(tài)選擇輸出緩存Provider的。例如我們可以為首頁(yè)和Top 10頁(yè)面使用ASP.NET內(nèi)置的內(nèi)存provider(它超級(jí)迅速,因?yàn)閮?nèi)容存在內(nèi)存中),而把不常用的請(qǐng)求頁(yè)面緩存到磁盤。
我們可以通過(guò)重載應(yīng)用的Global.asax的GetOutputCacheProviderName()來(lái)實(shí)現(xiàn)上面的要求:
public class Global: System.Web.HttpApplication
{
public override string GetOutputCacheProviderName(HttpContext context)\
{
if(context.Request.Path.EndsWith("Home.aspx")
{
return "AspNetInternalProvider";
}
else
{
return base.GetOutputCacheProviderName(context);
}
}
}
這樣我們單獨(dú)為Home.aspx頁(yè)面使用ASP.NET的內(nèi)存緩存provider,而其他請(qǐng)求使用web.config中配置的緩存provider。
- asp.net頁(yè)面SqlCacheDependency緩存實(shí)例
- Asp.net禁用頁(yè)面緩存的方法總結(jié)
- 設(shè)置ASP.NET頁(yè)面不被緩存(客戶端/服務(wù)器端取消緩存方法)
- ASP.NET頁(yè)面在IE緩存的清除辦法
- asp.net 使用駐留在頁(yè)面中的Cache緩存常用可定時(shí)更新的數(shù)據(jù)
- asp.net 頁(yè)面輸出緩存
- ASP.net Substitution 頁(yè)面緩存而部分不緩存的實(shí)現(xiàn)方法
- ASP.NET 2.0中的頁(yè)面輸出緩存
- 讓html頁(yè)面不緩存js的實(shí)現(xiàn)方法
- ASP.NET頁(yè)面緩存常見的4種方式
相關(guān)文章
利用Builder方式創(chuàng)建對(duì)象示例代碼
這篇文章主要給大家介紹了關(guān)于利用Builder方式創(chuàng)建對(duì)象的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11ASP.NET中實(shí)現(xiàn)把form表單元素轉(zhuǎn)為實(shí)體對(duì)象或集合
這篇文章主要介紹了ASP.NET中實(shí)現(xiàn)把form表單元素轉(zhuǎn)為實(shí)體對(duì)象或集合,本文又是一個(gè)對(duì)重復(fù)數(shù)據(jù)處理的一個(gè)封裝,非常實(shí)用的開發(fā)技巧,需要的朋友可以參考下2015-06-06如何將asp.net core程序部署到Linux服務(wù)器
這篇文章主要介紹了將asp.net core程序部署到Linux服務(wù)器上的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09Asp.net MVC 中利用jquery datatables 實(shí)現(xiàn)數(shù)據(jù)分頁(yè)顯示功能
這篇文章主要介紹了Asp.net MVC 中利用jquery datatables 實(shí)現(xiàn)數(shù)據(jù)分頁(yè)顯示功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06ASP.NET Core 3框架揭秘之 異步線程無(wú)法使用IServiceProvider問(wèn)題
這篇文章主要介紹了ASP.NET Core 3框架揭秘之異步線程無(wú)法使用IServiceProvider問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12Linux上使用Docker部署ASP.NET?Core應(yīng)用程序
這篇文章介紹了使用Docker部署ASP.NET?Core應(yīng)用程序的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03Entity?Framework使用Fluent?API配置案例
本文詳細(xì)講解了Entity?Framework使用Fluent?API配置案例的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03ASP.NET Core Api網(wǎng)關(guān)Ocelot的使用初探
這篇文章主要介紹了ASP.NET Core Api網(wǎng)關(guān)Ocelot的使用初探,幫助大家更好的理解和學(xué)習(xí)使用.NET技術(shù),感興趣的朋友可以了解下2021-03-03asp.net 簡(jiǎn)易生成注冊(cè)碼(數(shù)字+大小寫字母)
注釋寫的很詳細(xì),不做過(guò)多的描述了,希望能給初學(xué)者帶來(lái)一些幫助,同時(shí)也是自己知識(shí)的一個(gè)積累過(guò)程。2008-11-11