六 資料庫快取依賴

2021-05-23 06:13:21 字數 3776 閱讀 7371

更多的時候,我們的伺服器效能損耗還是在查詢資料庫的時候,所以對資料庫的快取還是顯得特別重要,上面幾種方式都可以實現部分資料快取功能。但問題

是我們的資料有時候是在變化的,這樣使用者可能在快取期間查詢的資料就是老的資料,從而導致資料的不一致。那有沒有辦法做到,資料如果不變化,使用者就一直從

快取中取資料,一旦資料變化,系統能自動更新快取中的資料,從而讓使用者得到更好的使用者體驗。

答案是肯定的!

.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

表的內容發生變化時,查詢操作才會重新查詢資料更新快取的內容,可以大大減少資料庫的重複查詢和提高系統的效能和執行效率。

系統快取學習(六)資料庫快取依賴

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

資料庫快取依賴

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

系統快取全解析(五) 資料庫快取依賴

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