緩存——能很好的提高站點的性能。
在通路量大,但更新較少的網站中使用緩存,可以大大提高運作效率;
在.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建立 資料緩存那大小寫一樣