除了原來的CacheDependency 針對File相依性決定移除Cache之外, ASP.NET 2.0 新增了SQL 相依性的功能, 是針對SQL Server 的Table 或是查詢進行變更時, 移除Cache 的策略. 它提供了兩種方式,
- 輪詢模式
- 查詢通知
輪詢模式
只支援SQL Server 7.0 (含)以上的版本, 由ASP.NET主動定期向SQL Server詢問Table 是否遭到異動, 以決定是否移除快取.
使用輪詢模式必須執行以下動作:
- 執行aspnet_regsql, 在資料庫及資料表設定異動檢查
Aspnet_regsql –S 伺服器名稱 –E –d 資料庫 -ed –t 資料表 –et
- asp.net 的web.config 設定輪詢的時間及連線字串
<caching>
<sqlCacheDependency enabled="true" pollTime="1000">
<databases>
<add name="NWDB" connectionStringName="NorthwindConnectionString" pollTime="1000"/>
</databases>
</sqlCacheDependency>
</caching> - asp.net 的網頁要用到SQL Cache Dependency 時指定web.config 的SqlCacheDependencies 的項目名稱
<%@ OutputCache Duration="秒數" VaryByParam="參數清單" SqlDependency = "資料庫快取相依性名稱:資料表" %>
<%@ OutputCache Duration="3600" VaryByParam="None" SqlDependency = "NWDB:Categories;NWDB:Products" %>
查詢通知
只支援SQL Server 2005以上的版本, 由ASP.NET向SQL Server 註冊事件, SQL Server 只要發現查詢有異動, 便主動通知有註冊的服務.
使用查詢通知必須執行以下動作:
- 在SQL Server 啟用通知功能
ALTER DATABASE Pubs SET ENABLE_BROKER ;
- 在ASP.NET的Global.asax, Application_Start 時向SQL Server註冊事件
Application_Start事件啟動接聽程式
SqlDependency.Start("連線字串")
在Application_End事件停用接聽程式
SqlDependency.Stop("連線字串")
- 網頁要用到時, 在相關的SqlCacheDependency 設定 CommandNotification
<%@ OutputCache Duration="秒數" VaryByParam="參數清單" SqlDependency = "CommandNotification" %>
沒有留言:
張貼留言