系統緩衝全解析6:資料庫緩衝依賴__資料庫

來源:互聯網
上載者:User

 

    更多的時候,我們的伺服器效能損耗還是在查詢資料庫的時候,所以對資料庫的緩衝還是顯得特別重要,上面幾種方式都可以實現部分資料緩衝功能。但問題是我們的資料有時候是在變化的,這樣使用者可能在緩衝期間查詢的資料就是老的資料,從而導致資料的不一致。那有沒有辦法做到,資料如果不變化,使用者就一直從緩衝中取資料,一旦資料變化,系統能自動更新緩衝中的資料,從而讓使用者得到更好的使用者體驗。

   答案是肯定的。.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>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.