深入System.Web.Caching命名空間 教你Hold住緩衝管理(三)

來源:互聯網
上載者:User

本文分三篇,從緩衝所在命名空間System.Web.Caching開始,詳細的介紹.NET架構提供的緩衝類和操作方法。看完之後你將學會:

  • 第一篇-如何?簡單的資料緩衝
  • 第二篇-緩衝從檔案中讀取的資料,並通過檔案依賴實現快取資料的及時更新
  • 第三篇-快取資料庫中的整張表,並通過資料庫依賴實現快取資料的及時更新

在學習了前兩篇Cache類和CacheDependency類的用法後,最後一篇,我們來玩一下SqlCacheDependency類實現資料庫緩衝的及時更新。

如果對緩衝管理沒有基礎的看官,建議看完前兩篇再來看這一篇。

 

一,資料庫緩衝依賴類SqlCacheDependency

  SqlCacheDependency類的使用需要結合SQL Server資料庫,目前還沒有Oracle資料庫的緩衝依賴。此篇我們使用SQL Server2005來示範。

  1.文法定義

  SqlCacheDependency類的文法定義如下:

public class SqlCacheDependency: IDisposable

 

  同CacheDependency類一樣,SqlCacheDependency也繼承了介面”IDisposable“,此介面主要用來定義釋放分配的非託管資源的方法。

  繼承此介面的類,必須實現方法Dispone ,實現資源的釋放。這個介面在第二篇中有稍作介紹,在此不再複述了。

  SqlCacheDependency的主要建構函式如下:

public SqlCacheDependency(string dataBase,string table)

  dataBase代表要啟用的緩衝的資料庫,table代表緩衝的表。實際使用過程中,只需要指明緩衝的資料和表就可以了。

  2.方法和屬性

  SqlCacheDependency類的方法和屬性與CacheDependency類相同,主要還是那三個:

  • 屬性”HasChanged“:判斷資料庫依賴是否發生了變化。
  • 屬性”UtcLastModified“:擷取資料庫緩衝依賴項上次更改的事件。
  • 方法”Dispose“:釋放SqlCacheDependency對象佔用的資源。

  這三個成員的使用方法同CacheDependency類的成員相似,所以在此不再贅述。有需要的話可以在參考第二篇。

 

二,使用SqlCacheDependency類的流程

  實現資料庫緩衝依賴,我所知的方法有兩種,一種是使用編程的方法來實現,與第二篇中的實現檔案快取依賴的思路相似,不過建立緩衝時依賴項是SqlCacheDependency的一個執行個體。

  所以這裡我想介紹給大家的是OutputCache緩衝技術。如果想使用編程方式來實現此功能,可參考第二篇中最後的樣本。

  要實現資料庫緩衝依賴,必須結合資料庫的操作。在使用資料庫緩衝依賴之前,必須進行5步操作:

  

 

  只有具備了上述條件,才可以正常的使用資料庫緩衝依賴。最後我們看看如何來實現。

 

三,典型應用:使用SqlCacheDependency擷取資料庫表最新資料

 

  這個樣本所體現的功能是,快取資料庫表,並在內容發生變化時,儲存在緩衝中的資料項目更新到最新。

 

  1,建立資料庫並為

  我們首先建立一個資料庫JohnConnor_DB,然後在資料庫中添加一個Player表:

  • id <int> 自增長資料標識,
  • Name <nvarchar(20)>  球員姓名,
  • Height<nvarchar(10)> 球員身高

 

  2,通知數據庫啟用緩衝依賴項

  SQLServer支援SqlCacheDependency特性,需要對資料庫伺服器執行相關的配置。

  現在我們來為資料庫啟用快取通知。這裡有兩種方式來通知數據庫,表啟用緩衝依賴項,

  • 借用ASPNET_REGSQL命令列工具
  • 使用SqlCacheDependencyAdmin類

   首先我們來介紹使用命令列工具,該工具位於windows\microsoft.net\framework\[版本]檔案夾中。如果你找不到它,在安裝VS2005以上版本的前提下,

  可以點擊 開始/所有程式/MicroSoft Visual Studio 2010/Visual Studio Tools/Visual Studio 2010命令提示來使用它,在命令提示框中輸入

aspnet_regsql.exe -S 192.168.1.99\sqlserver2005 -U (JohnConnor),-P (JohnConnorV5) -ed -d JohnConnor_DB -et -t Player

 

  注意如果使用的資料庫驗證方式是"Sql Server身分識別驗證",則需要-E換成,

  如果你想瞭解上面每個命令參數的意義,可以輸入aspnet_regsql.exe -? 這裡為了方便大家理解給了個參數列表(列表是COPY來的,原諒我的懶惰,阿門~~~)

  • -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功能。

 

  輸入命令後,斷行符號,執行成功,會提示為SQL緩衝依賴項啟用該資料庫/表。

  第二個方法使用SqlCacheDependencyAdmin類,直接在頁面的“Page_Load”下加入以下註冊代碼

  protected void Page_Load(object sender, EventArgs e)    {   
     System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications(
  System.Configuration.ConfigurationManager.ConnectionStrings["name"].ConnectionString);//通知哪個資料庫,name是該資料庫連結字串的名字 System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications(
  System.Configuration.ConfigurationManager.ConnectionStrings["name"].ConnectionString, "Player");//通知啟用哪個表,Player是表名 }

 

  就可以了。

  兩種方法執行後,會向資料庫裡添加一個AspNet_SqlCacheTablesForChangeNotification表。

 

 

  3,在網站中進行資料庫快取項目配置

  然後我們建立一個ASP.NET網站(我偷懶,第二篇的改個名字繼續用...),命名為JohnConnor.SqlCacheDependencySample。

  首先我們在Web.Config中設定資料庫連結字串:

 <connectionStrings>        <add name="TestDBconnectionStrings" providerName="System.Data.SqlClient" 
      connectionString="Data Source=192.168.1.99\SQLSERVER2005;Initial Catalog=JohnConnor_DB;User ID=JohnConnor;Password=JohnConnorV5;" /> </connectionStrings>

 

  然後在“system.web”節點內,添加資料庫緩衝依賴的配置,注意配置中的“connectionStringsName”屬性,需要與前面建立的資料庫連結字串名字對應:

  <caching>       <sqlCacheDependency enabled="true" pollTime="1000">           <databases>               <add name="JohnConnor_DB" connectionStringName="TestDBconnectionStrings" pollTime="1000"/>                  </databases>       </sqlCacheDependency>   </caching>

  現在我們的配置部份就暫時告一段落。下面我們來驗收成果。

 

  4. 完成樣本

  我們在預設產生的Default.aspx頁,添加一個GridView控制項,用來顯示從資料庫擷取的資料。並添加一個控制項,主要用來顯示時間,用時間來判斷頁面顯示的是否是快取資料。

  首先給GridView配置資料來源,單擊工作清單,在“選擇資料來源”下拉框中,單擊“建立資料來源”,在設定精靈的資料來源類型視窗中選擇“資料庫”,單擊“確定”後出現選擇連結字串視窗,在下拉式清單中選擇我們剛才建立的”TestDBconnectionStrings“串連串,單擊”下一步“,出現“配置Select語句”對話方塊,在“列”列表框中選擇“*”,表示選中所有列,”下一步“,“完成”。

  現在切換到程式碼檢視,在"Page_Load"事件中添加:

Literal.Test=DateTime.Now.ToString();

  主要是來判斷顯示的是不是緩衝。現在儲存下F5,重新整理頁面可以看到時間是不斷變化的,說明資料並非來自緩衝。

  現在在Default.aspx的原始碼視圖的"<@page>"行下,添加如下代碼:

<%@ OutputCache Duration="3600"  SqlDependency="JohnConnor_DB:Player" VaryByParam="none"%>

  這樣資料庫緩衝依賴就添加完成了。

  現在F5運行網站,此時再重新整理頁面,發現時間已經不再變化,因為整個頁的資料都被緩衝了。

  現在我們修改以下資料庫的內容,然後重新整理剛才的頁面,可以發現,時間向後推進了,資料也發生了改變。

  這就是資料庫緩衝依賴的作用了。

  當資料庫內容更新的時候,不管緩衝的時間是否到了,緩衝內容都會被更新。

  ----------------------------------------------------------END------------------------------------------------------

  草草結了個尾。。。

  至此,三篇已經完結。這是一個完結的短篇幅系列,,,不容易呢。比較忙丫,沒時間寫長篇。

  謝謝大家捧場。希望能夠協助到有用的人。

  

 

  

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.