2008年11月9日 星期日

ASP.NET快取之SQL相依性

除了原來的CacheDependency 針對File相依性決定移除Cache之外, ASP.NET 2.0 新增了SQL 相依性的功能, 是針對SQL Server 的Table 或是查詢進行變更時, 移除Cache 的策略. 它提供了兩種方式,

  1. 輪詢模式
  2. 查詢通知

輪詢模式

只支援SQL Server 7.0 (含)以上的版本, 由ASP.NET主動定期向SQL Server詢問Table 是否遭到異動, 以決定是否移除快取.

使用輪詢模式必須執行以下動作:

  1. 執行aspnet_regsql, 在資料庫及資料表設定異動檢查

    Aspnet_regsql –S 伺服器名稱 –E –d 資料庫 -ed –t 資料表 –et

  2. asp.net 的web.config 設定輪詢的時間及連線字串
    <caching>
    <sqlCacheDependency enabled="true" pollTime="1000">
    <databases>
    <add name="NWDB" connectionStringName="NorthwindConnectionString" pollTime="1000"/>
    </databases>
    </sqlCacheDependency>
    </caching>


  3. 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 只要發現查詢有異動, 便主動通知有註冊的服務.


使用查詢通知必須執行以下動作:



  1. 在SQL Server 啟用通知功能

    ALTER DATABASE Pubs SET ENABLE_BROKER ;


  2. 在ASP.NET的Global.asax, Application_Start 時向SQL Server註冊事件

    Application_Start事件啟動接聽程式


    SqlDependency.Start("連線字串")


    在Application_End事件停用接聽程式


    SqlDependency.Stop("連線字串")


  3. 網頁要用到時, 在相關的SqlCacheDependency 設定 CommandNotification

    <%@ OutputCache Duration="秒數" VaryByParam="參數清單" SqlDependency = "CommandNotification" %>


沒有留言:

張貼留言