23.2.3 高速缓存依赖性(1)
?
使用Cache對象可以根據(jù)幾個不同的依賴性,來存儲和禁用高速緩存中的數(shù)據(jù)項。在ASP.NET 1.0/1.1中,只有如下依賴性:
基于文件的依賴性
基于鍵的依賴性
基于時間的依賴性
在使用Cache對象給高速緩存插入數(shù)據(jù)項時,用Insert方法設(shè)置依賴性,如下面的示例所示:
Duration屬性定義了頁面在高速緩存中的保存時間(秒)。VaryByParam屬性確定高速緩存頁面輸出的版本。根據(jù)所需要的HTTP-POST或HTTP-GET響應(yīng)可以生成不同的響應(yīng)。除了OutputCache指令的屬性之外,ASP.NET還包含VaryByHeader、VaryByCustom、VaryByControl和Location屬性。另外,Shared屬性也會影響UserControl,如后面所述。
ASP.NET中的高速緩存實現(xiàn)為一個HttpModule,它通過ASP.NET輔助進(jìn)程監(jiān)聽所有HttpRequest。OutputCacheModule監(jiān)聽?wèi)?yīng)用程序的ResolveRequestCache和UpdateRequest Cache事件,處理高速緩存的請求和失敗,返回高速緩存的HTML,如果需要,繞過頁面處理程序。
1. VaryByParam屬性
VaryByParam屬性可以指定哪些QueryString參數(shù)會高速緩存頁面的新版本:
| Cache.Insert("DSN", connectionString, _ New CacheDependency(Server.MapPath("myconfig.xml"))) |
在所引用的數(shù)據(jù)項發(fā)生變化時使用依賴性,就從內(nèi)存中刪除了該數(shù)據(jù)項的高速緩存。
高速緩存依賴性在ASP.NET 2.0中進(jìn)行了改進(jìn),添加了AggregateCacheDependency類、可擴(kuò)展的CacheDependency類,還可以創(chuàng)建定制的CacheDependency類。詳見下面的內(nèi)容。
1. AggregateCacheDependency類
AggregateCacheDependency類類似于CacheDependency類,但它可以使用不同類型的依賴性,建立與高速緩存中的數(shù)據(jù)項的關(guān)聯(lián)。例如,如果XML文件中有一個高速緩存的數(shù)據(jù)項,還從SQL數(shù)據(jù)庫表中獲得了信息,就可以創(chuàng)建一個AggregateCacheDependency,其中為每個子依賴性插入一個CacheDependency對象。為此,要調(diào)用Cache.Insert,添加AggregateCacheDependency實例,如下所示:
| Dim agg as new AggregateCacheDependency() agg.Insert(New CacheDependency(Server.MapPath("myconfig.xml"))) agg.Insert(New SqlCacheDependency("Northwind", "Customers")) Cache.Insert("DSN", connectionString, agg) |
注意,要和不同類型的CacheDependency類一起使用。如果只想給一個高速緩存的數(shù)據(jù)項與多個文件建立關(guān)聯(lián),可以使用CacheDependency的一個重載版本,如下所示:
| VB Cache.Insert("DSN", yourObject, _ New System.Web.Caching.CacheDependency( _ New String() _ { _ Server.MapPath("foo.xml"), _ Server.MapPath("bar.xml") _ } _ ) _ ) C# Cache.Insert("DSN", yourObject, new System.Web.Caching.CacheDependency( new string[] { Server.MapPath("foo.xml"), Server.MapPath("bar.xml") } ) ); |
AggregateCacheDependency類支持?jǐn)U展以前的密封類CacheDependency,可以使用這個新特性創(chuàng)建定制的CacheDependency。
2. 非密封的CacheDependency類
在ASP.NET 2.0中,高速緩存的一個重大變化是重新修訂了CacheDependency類,它現(xiàn)在是不密封的(即可以重寫)。現(xiàn)在可以創(chuàng)建繼承于CacheDependency的類,建立更精細(xì)的依賴性,而不限于過去的Time、Key和File依賴性。
在創(chuàng)建自己的高速緩存依賴性時,可以為Web服務(wù)數(shù)據(jù)、僅用于午夜的依賴性和文件中的文本字符串變化等添加過程。我們創(chuàng)建的依賴性沒有任何限制。CacheDependency類的非密封性允許指定高速緩存中的數(shù)據(jù)項何時需要禁用。
有了CacheDependency類的非密封性,ASP.NET小組建立了一個新的SQL Server高速緩存依賴性:SqlCacheDependency。SqlCacheDependency是ASP.NET1.0/1.1開發(fā)人員最需要的高速緩存功能。在高速緩存因底層SQL Server的表發(fā)生變化而無效時,我們會立即知道。
CacheDependency類現(xiàn)在不是密封的,所以可以派生出定制的CacheDependencies類,如下一節(jié)所述。
轉(zhuǎn)載于:https://www.cnblogs.com/33568639/archive/2008/12/29/1364733.html
總結(jié)
以上是生活随笔為你收集整理的23.2.3 高速缓存依赖性(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入分析Flex [Bindable]
- 下一篇: 数学、物理算法ActionScript实