更多的時候,我們的伺服器效能損耗還是在查詢資料庫的時候,所以對資料庫的快取還是顯得特別重要,上面幾種方式都可以實現部分資料快取功能。但問題
是我們的資料有時候是在變化的,這樣使用者可能在快取期間查詢的資料就是老的資料,從而導致資料的不一致。那有沒有辦法做到,資料如果不變化,使用者就一直從
快取中取資料,一旦資料變化,系統能自動更新快取中的資料,從而讓使用者得到更好的使用者體驗。
答案是肯定的!
.net
已經為我們提供了這樣一種非常好的解決方法:
sqlcachedependency
資料庫快取依賴。
實現步驟:
下面就讓我們看一下如何實現資料庫快取依賴功能:
第一步:
修改web.config
,讓專案啟用
sqlcachedependency
。將下列**加入
web.config的節:
<?xml version="1.0"?>
這裡的connectionstringname
指定了在
中新增的某乙個連線字串。
name
則是為該
sqlcachedependency
起的名字,這個名字將在第
3步中用到。
sqlcachedependency
類會自動完成對此配置節資訊的讀取以建立和資料庫之間的聯絡。
注意:在
節的中的
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
依賴:
///
///
獲取當前應用程式指定
cachekey
的cache
物件值///
///
索引鍵值
///
返回快取物件
public static object getcache(string cachekey)
///
///
設定以快取依賴的方式快取資料
///
///
索引鍵值
///
快取物件
///
依賴物件
public static void setcache(string cachekey, object objobject, system.web.caching.cachedependency dep)
protected void page_load(object sender, eventargs e)
}gridview1.datasource = (dataset)objmodel;
gridview1.databind();}//
查詢資料
private dataset getdata()
從以上**可以看出,和檔案依賴基本相同,只是在存放快取
setcache
時存入的依賴物件不同罷了。這裡用的是
sqlcachedependency
。其中,建立
sqlcachedependency
的構造方法:
public sqlcachedependency(string databaseentryname,string tablename)
databaseentryname
:是在web.config
檔案的caching
節的sqlcachedependency
的databases
元素中定義的資料庫的名稱。
tablename
:與sqlcachedependency
關聯的資料庫表的名稱。
這樣,只有當
p_product
表的內容發生變化時,查詢操作才會重新查詢資料更新快取的內容,可以大大減少資料庫的重複查詢和提高系統的效能和執行效率。
系統快取學習(六)資料庫快取依賴
更多的時候,我們的伺服器效能損耗還是在查詢資料庫的時候,所以對資料庫的快取還是顯得特別重要,上面幾種方式都可以實現部分資料快取功能。但問題是我們的資料有時候是在變化的,這樣使用者可能在快取期間查詢的資料就是老的資料,從而導致資料的不一致。那有沒有辦法做到,資料如果不變化,使用者就一直從快取中取資料,...
資料庫快取依賴
更多的時候,我們的伺服器效能損耗還是在查詢資料庫的時候,所以對資料庫的快取還是顯得特別重要,上面幾種方式都可以實現部分資料快取功能。但問題是我們的資料有時候是在變化的,這樣使用者可能在快取期間查詢的資料就是老的資料,從而導致資料的不一致。那有沒有辦法做到,資料如果不變化,使用者就一直從快取中取資料,...
系統快取全解析(五) 資料庫快取依賴
更多的時候,我們的伺服器效能損耗還是在查詢資料庫的時候,所以對資料庫的快取還是顯得特別重要,上面幾種方式都可以實現部分資料快取功能。但問題是我們的資料有時候是在變化的,這樣使用者可能在快取期間查詢的資料就是老的資料,從而導致資料的不一致。那有沒有辦法做到,資料如果不變化,使用者就一直從快取中取資料,...