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