Asp.net資料庫緩衝依賴

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   io   使用   java   ar   

Asp.net資料庫緩衝依賴

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

  答案是肯定的!.NET已經為我們提供了這樣一種非常好的解決方案:SqlCacheDependency資料庫緩衝依賴。 

  實現步驟: 

  下面就讓我們看一下如何?資料庫緩衝依賴功能:

  第一步: 修改web.config,讓項目啟用SqlCacheDependency 。

  將下列代碼加入web.config的<system.web>節:

<?xml version="1.0"?><!--  有關如何配置 ASP.NET 應用程式的詳細資料,請訪問  http://go.microsoft.com/fwlink/?LinkId=169433  --><configuration>    <system.web>        <caching>            <sqlCacheDependency enabled="true" pollTime="6000">                <databases>                    <add name="codematic" connectionStringName="strcodematic" />                </databases>            </sqlCacheDependency>        </caching>    </system.web>    <connectionStrings>        <add  name="strcodematic" connectionString="server=.;database=XLinShaWyDBase;uid=sa;pwd=123"/>    </connectionStrings></configuration>

  這裡的connectionStringName指定了在<connectionStrings>中添加的某一個連接字串。name則是為該SqlCacheDependency起的名字,這個名字將在第3步中用到。
  SqlCacheDependency類會自動完成對此配置節資訊的讀取以建立和資料庫之間的聯絡。

  注意:在<databases>節的<add name="codematic" connectionStringName="strcodematic"/>中的name屬性值必須和第三步的Page_Load代碼中System.Web.Caching.SqlCacheDependency("codematic","dbo.Contact"); 中的第一個參數(資料庫名稱)相一致。
  第二步:執行下述命令,為 資料庫啟用緩衝依賴。

  如果要配置SqlCacheDependency,則需要以命令列的方式執行。

  aspnet_regsql.exe工具位於Windows\\Microsoft.NET\\Framework\\[版本]檔案夾中。

  如:(C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319)

  aspnet_regsql -C "data source=.;initial catalog=XLinShaWyDBase;user id=sa;password=123" -ed -et -t "dbo.Contact"

  參數-C後面的字串是連接字串(請替換成自己所需要的值),

  參數-t後面的字串是資料表的名字。

生產成功後,在對應的資料庫,會多一個表dbo.AspNet_SqlCacheTablesForChangeNotification

select * from dbo.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依賴:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data.SqlClient;using System.Data;public partial class Default4 : System.Web.UI.Page{    /// <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>    /// 設定以緩衝依賴的方式快取資料    /// </summary>    /// <param name="CacheKey">索引索引值</param>    /// <param name="objObject">緩衝對象</param>    /// <param name="cacheDepen">依賴對象</param>    public static void SetCache(string CacheKey, object objObject, System.Web.Caching.CacheDependency dep)    {            System.Web.Caching.Cache objCache = HttpRuntime.Cache;            objCache.Insert(                    CacheKey,                    objObject,                    dep,                    System.Web.Caching.Cache.NoAbsoluteExpiration, //從不到期                    System.Web.Caching.Cache.NoSlidingExpiration, //禁用可調到期                    System.Web.Caching.CacheItemPriority.Default,                    null);    }    protected void Page_Load(object sender, EventArgs e)    {        string CacheKey = "cachetest";         object objModel = GetCache(CacheKey);//從緩衝中擷取            if (objModel == null)//緩衝裡沒有            {                    objModel = GetData();//把目前時間進行緩衝                    if (objModel != null)                    {                            //依賴資料庫codematic中的P_Product表變化 來更新緩衝                            System.Web.Caching.SqlCacheDependency dep = new System.Web.Caching.SqlCacheDependency("codematic", "dbo.Contact");                            SetCache(CacheKey, objModel, dep);//寫入緩衝                    }            }                          GridView1.DataSource = (DataSet)objModel;            GridView1.DataBind();    }    private DataSet GetData()     {        string conString = "data source=.;initial catalog=XLinShaWyDBase;user id=sa;password=123"; string strSQL = "SELECT * FROM dbo.Contact";         SqlConnection myConnection = new SqlConnection(conString);        DataSet ds = new DataSet(); myConnection.Open();         SqlDataAdapter adapter = new SqlDataAdapter(strSQL, myConnection); adapter.Fill(ds, "dbo.Contact");        myConnection.Close();         return ds;     }}

從以上代碼可以看出,和檔案依賴基本相同,只是在存放緩衝SetCache時存入的依賴對象不同罷了。這裡用的是SqlCacheDependency。

  其中,建立SqlCacheDependency的構造方法:

  public SqlCacheDependency(string databaseEntryName,string tableName)

  databaseEntryName :是在Web.config 檔案的 caching 節的 sqlCacheDependency 的 databases 元素中定義的資料庫的名稱。

  tableName :與 SqlCacheDependency 關聯的資料庫表的名稱。

  這樣,只有當dbo.Contact表的內容發生變化時,查詢操作才會重新查詢資料更新緩衝的內容,可以大大減少資料庫的重複查詢和提高系統的效能和運行效率。

 

Asp.net資料庫緩衝依賴

相關文章

聯繫我們

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