天天看點

.net 依賴緩存

緩存——能很好的提高站點的性能。

在通路量大,但更新較少的網站中使用緩存,可以大大提高運作效率;

在.net中給我們提供了很好的緩存機制,頁面緩存、資料緩存,還有很好的依賴緩存。

依賴緩存好處就是,跟相依賴的項的改變有關,比如cacheTable表有資料改變時,資料已經緩存了的就會被清楚,重新讀取新的資料,能保持資料的實時更新。

頭幾天學習了下sql 依賴緩存,實作過程和步驟記錄下:

環境:windows 2003+IIS6  ,SQL2008+VS2008

一、首先在sql2008中建立資料庫CacheDB,建立表CacheTable

然後在Visual Studio 指令提示下 運作aspnet_regsql.exe 應用程式(也可以在cmd下找到C:/Program Files/Microsoft Visual Studio 9.0/VC>運作)

直接運作asp.net_regsql.exe建立的是選擇的資料庫的其他特性表,如:aspnet_Roles  等。

下面以資料庫CacheDB,資料表CacheTable為例;

要建立資料庫的依賴緩存 須運作如下指令:

aspnet_regsql -S localhost -U sa  -P 123456 -d CacheDB -ed    //打開依賴的資料庫,然後在建立依賴資料表

aspnet_regsql -S localhost -U sa  -P 123456 -d CacheDB -et -t CacheTable   //建立依賴資料表

當運作以上指令後會出現資料表 : AspNet_SqlCacheTablesForChangeNotification

aspnet_regsql 指令參數說明:

 -? 顯示該工具的幫助功能;

 -S 後接的參數為資料庫伺服器的名稱或者IP位址;

 -U 後接的參數為資料庫的登陸使用者名;

 -P 後接的參數為資料庫的登陸密碼;

 -E 當使用windows內建驗證時,使用該功能;

 -d 後接參數為對哪一個資料庫采用SqlCacheDependency功能;

 -t 後接參數為對哪一個表采用SqlCacheDependency功能;

 -ed 允許對資料庫使用SqlCacheDependency功能;

 -dd 禁止對資料庫采用SqlCacheDependency功能;

 -et 允許對資料表采用SqlCacheDependency功能;

 -dt 禁止對資料表采用SqlCacheDependency功能;

 -lt 列出目前資料庫中有哪些表已經采用sqlcachedependency功能。

以上步驟是在資料庫方面要實作處理的

二、配置網站的web.config

在system.web 節點中添加,緩存配置,代碼如下

這中方式主要是采用資料查詢輪詢的方式

<system.web>

<!--依賴緩存-->

<caching>

<!--5秒種輪詢一次-->

<sqlCacheDependency enabled="true" pollTime="5000">

<databases>

<add name="CacheDB" connectionStringName="SQLServer"/>

</databases>

</sqlCacheDependency>

</caching>

</system.web>

參數說明:pollTime:輪換的時間 (毫秒),"CacheDB" :為依賴的資料庫,SQLServer :為資料庫連接配接字元串,connectionStringName中的。

三、代碼實作

    1、 對頁面輸出緩存使用輪詢SQL緩存依賴

    根據上面的web.config配置

    在要緩存的頁面中  <%@ OutputCache Duration="6000" VaryByParam="none" SqlDependency="CacheDB:CacheTable" %>  CacheTable為資料表

當CacheTable資料表有改動時,重新整理後會顯示新的資料。

  2、對資料緩存使用輪詢SQL緩存依賴

      對多個表實作依賴緩存,代碼如下:

//這裡用GridView對資料進行綁定

public void BindData()

{

string[] tableName = new string[]{"Cache","CacheTable" };//這裡用cache表和CacheTable表,cache表的資料庫的依賴建立方法如cacheTable。

AggregateCacheDependency aggregateDependency = new AggregateCacheDependency();//執行個體化AggregateCacheDependency,用于多個執行個體SqlCacheDependency的加載

DataSet ds = Cache["gridview"] as DataSet;//從緩存中讀取資料

if (ds == null)

{

ds = DBHelper.ExecuteAdapter("select * from CacheTable inner join Cache on CacheTable.ID=Cache.cacheID");//從資料庫中讀取資料 ,傳回DataSet,ExecuteAdapter用的SQLHelper中的通路方法

foreach (string table in tableName)

{

aggregateDependency.Add(new SqlCacheDependency("Cache", table));//把依賴執行個體加載到數組中

}

// SqlCacheDependency Dependency = new SqlCacheDependency("Cache","CacheTable");//對單個表依賴緩存 直接執行個體化

Cache.Insert("gridview", ds, aggregateDependency);//添加到緩存中

Response.Write(DateTime.Now.ToString());//輸出目前時間,以測試是否緩存成功,

}

GridView1.DataSource = ds;

GridView1.DataBind();

}

 以上代碼為在資料緩存中使用的依賴緩存

注意:在web.config 中的DBCahce 和頁面輸出緩存中的DBCache:cahceTabel中 變量的大小寫要與在用aspnet_regsql.exe建立 資料緩存那大小寫一樣