更多的時候,我們的伺服器效能損耗還是在查詢資料庫的時候,所以對資料庫的緩衝還是顯得特別重要,上面幾種方式都可以實現部分資料緩衝功能。但問題是我們的資料有時候是在變化的,這樣使用者可能在緩衝期間查詢的資料就是老的資料,從而導致資料的不一致。那有沒有辦法做到,資料如果不變化,使用者就一直從緩衝中取資料,一旦資料變化,系統能自動更新緩衝中的資料,從而讓使用者得到更好的使用者體驗。
答案是肯定的。.NET已經為我們提供了這樣一種非常好的解決方案:SqlCacheDependency資料庫緩衝依賴。
實現步驟:
下面就讓我們看一下如何?資料庫緩衝依賴功能:
第一步: 修改web.config,讓項目啟用SqlCacheDependency 。
將下列代碼加入web.config的<system.web>節:
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings>
<add name="strcodematic" connectionString="data source=127.0.0.1;initial catalog=codematic;user id=sa;password=" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<caching>
<sqlCacheDependency enabled="true" pollTime="6000">
<databases>
<add name="codematic" connectionStringName="strcodematic" />
</databases>
</sqlCacheDependency>
</caching>
<compilation debug="true">
</compilation>
<authentication mode="Windows"/>
</system.web> </ configuration >
這裡的connectionStringName指定了在<connectionStrings>中添加的某一個連接字串。name則是為該SqlCacheDependency起的名字,這個名字將在第3步中用到。
SqlCacheDependency類會自動完成對此配置節資訊的讀取以建立和資料庫之間的聯絡。
| 注意: 在<databases>節的<add name="codematic" connectionStringName="strcodematic" />中的name屬性值必須和第三步的Page_Load代碼中System.Web.Caching.SqlCacheDependency("codematic", "P_Product"); 中的第一個參數(資料庫名稱)相一致。 |
第二步:執行下述命令,為 資料庫啟用緩衝依賴。
如果要配置SqlCacheDependency,則需要以命令列的方式執行。
aspnet_regsql.exe工具位於Windows//Microsoft.NET//Framework//[版本]檔案夾中。
aspnet_regsql -C "data source=127.0.0.1;initial catalog=codematic;user id=sa;password=" -ed -et -t "P_Product"
參數-C後面的字串是連接字串(請替換成自己所需要的值),
參數-t後面的字串是資料表的名字。
運行結果如圖15-3所示:
圖15-3 啟用資料庫緩衝依賴
命令執行後,在指定的資料庫中會多出一個AspNet_SqlCacheTablesForChangeNotification表。
| 注意: 要使得7.0或者2000版本以上的SQLServer支援SqlCacheDependency特性,需要對資料庫伺服器執行相關的配置。 有兩種方法配置SQLServer: 一 使用aspnet_regsql命令列工具, 二 使用SqlCacheDependencyAdmin類。 例如: aspnet_regsql -S "server" -E -d "database" –ed 或者 aspnet_regsql -S "server" -E -d "database" -et -t "table" 如果是Sql驗證的話要把-E換成,-U (使用者名稱),-P (密碼) 以下是該工具的命令參數說明: -? 顯示該工具的協助功能; -S 後接的參數為資料庫伺服器的名稱或者IP地址; -U 後接的參數為資料庫的登陸使用者名稱; -P 後接的參數為資料庫的登陸密碼; -E 使用當前登入使用者的 Windows 整合認證進行身分識別驗證。 -d 後接參數為對哪一個資料庫採用SqlCacheDependency功能; -C 串連資料庫的連接字串。如果您指定伺服器(-S)和登入(-U和-P,或 -E)資訊,則此選項不是必需的,因為連接字串已經包含這些資訊。 -t 後接參數為對哪一個表採用SqlCacheDependency功能; -ed 允許對資料庫使用SqlCacheDependency功能; -dd 禁止對資料庫採用SqlCacheDependency功能; -et 允許對資料表採用SqlCacheDependency功能; -dt 禁止對資料表採用SqlCacheDependency功能; -lt 列出當前資料庫中有哪些表已經採用sqlcachedependency功能。 |
第三步:在代碼中使用緩衝,並為其設定SqlCacheDependency依賴:
/// <summary>
/// 擷取當前應用程式指定CacheKey的Cache對象值
/// </summary>
/// <param name="CacheKey">索引索引值</param>
/// <returns>返回緩衝對象</returns>
public static object GetCache(string CacheKey)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
return objCache[CacheKey];
}
/// <summary>