SqlServer數(shù)據(jù)緩存依賴的功能.doc_第1頁
SqlServer數(shù)據(jù)緩存依賴的功能.doc_第2頁
SqlServer數(shù)據(jù)緩存依賴的功能.doc_第3頁
SqlServer數(shù)據(jù)緩存依賴的功能.doc_第4頁
全文預(yù)覽已結(jié)束

VIP免費下載

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

一、SQL SERVER 7.0/2000和SQL SERVER 2005的簡介及比較 1.1 SQL SERVER 7.0/2000 SQL SERVER 7.0/2000沒有提供內(nèi)置的支持數(shù)據(jù)緩存依賴的功能,所以只能通過采用添加特定數(shù)據(jù)庫表、觸發(fā)器等方式,通過后臺不斷輪詢數(shù)據(jù)庫來檢查數(shù)據(jù)更改。當在數(shù)據(jù)表上執(zhí)行INSERT、UPDATE、 DELETE操作時將自動發(fā)出更改通知,所以只能監(jiān)測到表級,具體到哪一行是沒法跟蹤的。 使用方法步驟: 1.1.1 使用aspnet_regsql命令行或SqlCacheDependencyAdmin來配置連接數(shù)據(jù)庫。 1.1.1.1ALTER DATABASE SET ENABLE_BROKER; aspnet_regsql -S -U sa -P sa -d -ed 啟動數(shù)據(jù)庫的數(shù)據(jù)緩存依賴功能 aspnet_regsql -S -U sa -P sa -d -t -et 啟動數(shù)據(jù)表的數(shù)據(jù)緩存依賴功能 1.1.1.2SqlCacheDependencyAdmin.EnableNotifications(connectionString); /啟動數(shù)據(jù)庫的數(shù)據(jù)緩存依賴功能SqlCacheDependencyAdmin.EnableTableForNotifications(connectionString, table); /啟用數(shù)據(jù)表緩存 推薦這段代碼寫在Global.asax的Application_Start方法中,以便應(yīng)用程序啟動的時候就啟用數(shù)據(jù)庫和數(shù)據(jù)表的緩存依賴功能。 1.1.2 配置Web.config配置在下的結(jié)點下,只有一個數(shù)據(jù)庫的話不必指定下一級結(jié)點 1.1.3 應(yīng)用程序數(shù)據(jù)緩存中使用(還可以在數(shù)據(jù)源控件、輸出緩存整個頁面時使用,這里就不介紹了,下同)SqlCacheDependency scd = new SqlCacheDependency(數(shù)據(jù)庫名稱,表名);Cache.Insert(.,scd,.); 1.2 SQL SERVER 2005 內(nèi)置支持SQL數(shù)據(jù)緩存依賴,內(nèi)置通知傳遞服務(wù),能夠提供更小粒度的數(shù)據(jù)更改監(jiān)測,使用和配置簡單。 使用方法步驟: 1.2.1 檢測是否已經(jīng)啟用Service BrokerSelect DATABASEpRoPERTYEX(數(shù)據(jù)庫名稱,IsBrokerEnabled) - 1 表示已經(jīng)啟用 0 表示沒有啟用 這個地方我看有些朋友翻譯的成“是否能啟用”,這是不對的,這里我把英文原文帖出來:“This can be checked by calling Select databasepropertyex(db Name, IsBrokerEnabled). A 1 means that the broker is enabled. A 0 means that the broker is not enabled. ”。 依據(jù)我的經(jīng)驗,如果直接在當前SqlServer2005上新建一個數(shù)據(jù)庫的話,默認是打開的,如果是從其他地方數(shù)據(jù)庫導過來的,導入之后默認關(guān)閉了。(可能有不準確,大家可以自己試驗一下測試一下)。如果已經(jīng)打開可直接調(diào)到1.2.2。 1.2.1.1 啟用Service BrokerALTER DATABASE 數(shù)據(jù)庫名稱 SET ENABLE_BROKER; 1.2.2 在實現(xiàn)基于服務(wù)的SQL數(shù)據(jù)緩存依賴過程中,需要顯式調(diào)用SqlDependency.Start來啟動接受依賴項更改通知的偵聽器。SqlDependency.Start(connectionString); /推薦將這段代碼加到Global.asax的Application_Start方法中,SqlDependency.Stop(connectionString); /用于關(guān)閉,可加在Global.asax的Application_End方法中。 1.2.3 應(yīng)用程序數(shù)據(jù)緩存中使用SqlCommand cmd = new SqlCommand(sql,conn); SqlCacheDependency scd = new SqlCacheDependency(cmd); Cache.Insert(.,scd,.); 注意: a). 必須設(shè)置完全限定名稱的數(shù)據(jù)表。即表名前面需要加所有者,如dbo.test。 b). 必須明確設(shè)置所訪問數(shù)據(jù)庫列名稱,不能使用“*”。 c). 必須保證不是聚合函數(shù)。如COUNT、MAX等。 1.3 比較、區(qū)別SQL SERVER 7.0/2000SQL SERVER 2005實現(xiàn)機制輪詢通知傳遞服務(wù)(Service Broker)是否需要配置啟用需要不需要,內(nèi)置支持數(shù)據(jù)更改檢測限于表級更改監(jiān)測表級、行級更改監(jiān)測 并且很明顯,SQL SERVER 2005的緩存機制更加高效。另外,SqlCacheDependency類還特別結(jié)合SQL SERVER 2005 進行了優(yōu)化: a). 使用SQL SERVER 2005 時,SqlCacheDependency類支持與System.Data.SqlClient.SqlDependency類進行集成。應(yīng)用程序可創(chuàng)建SqlDependency對象,并通過OnChanged事件處理程序接受通知進行注冊。這樣,應(yīng)用程序不僅可以使用Sql server 2005的查詢通知機制來監(jiān)測使用SQL查詢結(jié)果無效的數(shù)據(jù)更改,并將緩存對象從緩存中移除,而且還可以輕松獲取數(shù)據(jù)更改通知,以便刷新緩存。(從這里可以看出,當觸發(fā)onRemoveCallback委托的時候,數(shù)據(jù)已經(jīng)從緩存里面刪除了,這樣一來可以手動在委托里面添加緩存,或者干脆設(shè)置成null,讓他下次調(diào)用的時候再緩存。) b). 不僅向應(yīng)用程序添加緩存依賴項,還可以與OutputCache指令一起使用,以生成依賴于SqlServer數(shù)據(jù)庫表的輸出緩存的頁面或用戶控件。對于用戶控件,OutputCache指令不支持使用SQL SERVER 2005 的查詢通知(即onRemoveCallback委托)。 二、System.Web.Caching.Cache Insert和Add區(qū)別 2.1 Add方法 object Add(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback); 2.2 Insert方法 void Insert(string key, object value);void Insert(string key, object value, CacheDependency dependencies);void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration);void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemUpdateCallback onUpdateCallback);void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback); 2.3 比較、區(qū)別 a). Insert方法支持5種重載,使用靈活,而Add方法必須提供7個參數(shù); b). Add方法可以返回緩存項的數(shù)據(jù)對象,Insert 返回Void; c). 添加重復緩存情況下,Insert會替換該項,而Add方法會報錯。 三、 CacheDependency、AggregateCacheDependency、SqlCacheDependency 3.1 CacheDependency是AggregateCacheDependency和SqlCacheDependency的父類。主要用于在應(yīng)用程序數(shù)據(jù)緩存對象與文件、緩存鍵、文件或緩存鍵的數(shù)組或另外一個CacheDependency對象之間建立依賴關(guān)系。CacheDependency監(jiān)視依賴關(guān)系比便在任何對象更改時自動移除緩存對象。CacheDependency可以監(jiān)測一組(到文件或目錄的)文件路徑的更改情況。 3.2AggregateCacheDependency主要用于實現(xiàn)聚合緩存依賴。如一筆數(shù)據(jù)同時對兩個表進行緩存依賴,一旦其中任何一個表數(shù)據(jù)更改緩存將失效。 3.3 SqlCacheDependency將應(yīng)用程序數(shù)據(jù)緩存對象、頁面輸出緩存、數(shù)據(jù)源控件等與指定SQL Server數(shù)據(jù)庫表或Sql Server 2005 查詢結(jié)果之間建立緩存依賴關(guān)系,在表發(fā)生更改(Sql Server 2005 行級別更改)時,自動從緩存中刪除和重新添加與該表關(guān)聯(lián)的緩存對象。一般而言:SqlCacheDependency (SqlCommand) 用于SQL SERVER 2005SqlCacheDependency (數(shù)據(jù)庫名, 表名) 用于SQL SERVER 7.0/2000vs2005中啟用數(shù)據(jù)庫緩存依賴aspnet_regsql.exe -S localhost -U sa -P sa -d hnfms -edaspnet_regsql.exe -S localhost -U sa -P sa -d hnfms -t Applys -et數(shù)據(jù)庫端啟用緩存依賴ALTER DATABASE hnfms SET ENABLE_BROKER;數(shù)據(jù)庫端查詢是否啟用緩存依賴Select DATABASEpRoPERTYEX(hnfms,IsBrokerEnabled) - 1 表示已經(jīng)啟用 0 表示沒有啟用Web.config中配置 Gload.asxm中配置void Application_Start(object sender, EventArgs e) / 在應(yīng)用程序啟動時運行的代碼 System.Data.SqlClient.SqlDependency.Start(System.Configuration.ConfigurationManager.ConnectionStringshnfmsC

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論