以 SqlCacheDependency 類別在 ASP.NET 中快取

更新:2007 年 11 月

ASP.NET 可以讓您使用 SqlCacheDependency 類別,在資料庫的資料表或資料列上建立快取項目相依性。當資料表或特定資料列發生變更時,具有相依性的項目便會失效並且自快取中移除。您可以在 Microsoft SQL Server 7.0、SQL Server 2000 和 SQL Server 2005 中的資料表上設定相依性。如果您使用 SQL Server 2005,也可以在特定資料錄上設定相依性。

搭配 SQL 相依性使用快取能夠在某些案例中大幅增加應用程式的效能。例如,想像您正在建置從資料庫顯示產品資訊的電子商務應用程式。在不使用快取的情況下,每次使用者想要檢視產品時,您的應用程式都必須要求資料庫提供資料。您可以一次將產品資訊快取一整天,因為產品資訊已經在記憶體中,就可以確保較快的回應時間。然而,如果產品資訊變更,快取的產品資訊可能會一整天都無法與資料同步。

您可以使用 SQL 快取相依性快取產品資訊,然後在資料庫資料表或資料列變更上建立相依性。當資料變更時 (只有在資料變更時),依據資料的快取項目就會失效並且從快取移除。當您下一次從快取要求該項目時,如果該項目已經不存在快取中,就可以將更新版本重新加入快取,以確保您擁有最新的資料。

網頁輸出快取也可以使用 SQL 快取相依性。例如,您可以建立名為 ViewProduct.aspx 的網頁以顯示特定產品資訊。您可以如同手動加入快取的項目一樣,將網頁的快取原則設定為 SQL 相依性。然後網頁就會儲存在快取中,直到其相依的資料表或資料列變更為止。當資料變更時,就會重新建立網頁然後再次儲存在輸出快取中。

如需詳細資訊,請參閱 ASP.NET 快取概觀

功能

ASP.NET SQL 快取相依性提供下列功能:

  • 您可以在應用程式快取和網頁輸出快取上使用 SQL 快取相依性。

  • 您可以搭配 SQL Server 7.0 以及更新的版本使用 SQL 快取相依性。

  • 您可以在 Web 處理序區 (單一伺服器上有多個處理器) 或 Web 伺服陣列 (多個伺服器執行相同的應用程式) 中使用 SQL 快取相依性。

  • 與 SQL 快取相依性關聯的資料庫作業是單純的,因此不會對伺服器造成重大的處理負擔。

  • 您不需要大量的 SQL 知識,就能夠在應用程式和 SQL Server 中設定 SQL 快取相依性。ASP.NET 包含能夠自動設定的工具。此外,您也可以使用 SqlCacheDependencyAdmin 類別以程式設計方式設定 SQL 快取相依性。

SQL Server 7.0 和 SQL Server 2000 實作

ASP.NET 會實作 SQL Server 7.0 和 SQL Server 2000 快取相依性的輪詢模型。ASP.NET 中的一個執行緒會在指定時間間隔內輪詢 SQL Server 資料庫,以判斷資料是否有變更。如果是,相依快取項目會失效並且自快取中移除。您可以用宣告方式在 Web.config 檔中指定應用程式的輪詢間隔,或是使用 SqlCacheDependency 類別以程式設計方式指定。

在 SQL Server 7.0 和 SQL Server 2000 中,SQL 快取相依性限制在資料表層級的資料變更。您可以設定 ASP.NET 輪詢資料庫中資料表的變更,但是不能輪詢特定資料列中的變更。

啟用 SQL 快取

若要使用 SQL Server 7.0 和 SQL Server 2000 中的 SQL 快取相依性,您必須設定 SQL Server 以便提供支援。ASP.NET 提供公用程式設定 SQL Server 上的 SQL 快取,包括名為 Aspnet_regsql.exe 的工具和 SqlCacheDependencyAdmin 類別。如需在 SQL Server 上啟用 SQL 快取相依性的詳細資訊,請參閱 HOW TO:使用快取索引鍵相依性快取頁面輸出

SQL Server 2005 實作

SQL Server 2005 實作與 SQL Server 7.0 和 SQL Server 2000 不同的快取相依性模型。您不需要在 SQL Server 2005 上逐步執行任何特殊的設定步驟以啟用 SQL 快取相依性。此外,SQL Server 2005 也實作了一個變更告知模型,將告知傳送至訂閱的應用程式伺服器,而不是依賴 SQL Server 之前版本中所需的輪詢模型。

SQL Server 2005 快取相依性在接收告知的變更類型中更有彈性。SQL Server 2005 會監視對特定 SQL 命令結果集的變更。如果資料庫中發生的變更可能會修改這項命令的結果集,相依性會使快取的項目失效。這可以讓 SQL Server 2005 提供資料列層級的告知。

用來測試變更的查詢有一些必要條件。您必須提供完整的資料表名稱,其中包括擁有者的名稱 (例如 dbo.authors)。一般而言,SQL 2005 告知支援 Select 查詢以及預存程序,並且支援多重和巢狀查詢,但是不支援像是 COUNT(*) 的彙總作業。如需 SQL Server 2005 支援那些查詢和告知規則的詳細資訊,請參閱《SQL 線上叢書》中名為<建立告知查詢>的主題。

在 ASP.NET 應用程式中設定 SQL 快取

一旦在 SQL Server 7.0 或 SQL Server 2000 中設定快取相依性,或是在 SQL Server 2005 中建立適當的命令相依性,就能夠如同設定任何其他快取相依性一樣,設定應用程式使用 SQL 快取相依性。例如,您可以在 Web.config 檔中建立快取設定檔,然後在每個會使用 SQL 快取相依性的網頁上,參考這個快取設定檔。您也可以使用 SqlCacheDependency 類別,以程式設計方式啟用 SQL 快取相依性以便使用。如需詳細資訊,請參閱 HOW TO:使用快取索引鍵相依性快取頁面輸出

請參閱

工作

HOW TO:使用檔案相依性快取頁面輸出

概念

ASP.NET 快取概觀

ASP.NET 的快取組態