資料庫元件 Hxj Data (二十二) (快取)

2021-05-22 19:42:39 字數 3836 閱讀 9042

首先我是做web開發的,所以很多會偏向web的,元件使用的快取是system.web.httpruntime.cache。

元件在預設情況下是關閉快取的。

所以要開啟快取查詢要做一下配置。

先看一下例子配置:

<

configsections

>

<

section

name

="hxjcacheconfig" type

="hxj.data.cacheconfiguration,hxj.data"/>

configsections

>

<

hxjcacheconfig

enable

="true">

<

entities

>

<

add

key="northwindconnectionstring.products" value

="60">

add>

entities

>

hxjcacheconfig

>

<

connectionstrings

>

<

add

name

="northwindconnectionstring" connectionstring

="data source=ricci/hu;initial catalog=northwind;integrated security=true" providername

="system.data.sqlclient"/>

connectionstrings

>

hxjcacheconfig 節點的 enable 表示是否開啟快取,預設是關閉狀態,除非顯式開啟 enable

="true"。

entities 節點下的配置就是對實體查詢的快取配置。

<

add

key="northwindconnectionstring.products" value

="60">

add>

表示connectionstrings中的節點name

="northwindconnectionstring"的連線下的products表配置.

value

="60" 表示快取60秒。

所以一定要connectionstrings的name加上實體名,不然配置無效。

當然value也可以是快取依賴的檔案。

<

add

key="northwindconnectionstring.products" value

="1.txt">

add>

表示products表的查詢快取依賴程式根目錄下的1.txt檔案。元件會判斷該檔案是否存在,不存在則該配置無效。

那測試一下快取配置。

list

list = new

list

();for (int i = 0; i < 2; i++)

for (int i = 0; i < 3; i++)

我們設定 enable

="false",關閉快取。

看一下元件執行的sql:

top 1 * from [products] where ([products].[productid] = @1a6b9589aa23444c9e6e13049220c19d)

parameters: @1a6b9589aa23444c9e6e13049220c19d[int32] = 1

text: select

top 1 * from [products] where ([products].[productid] = @61ce100cf8074e76abc8d205b3ec0a2e)

parameters: @61ce100cf8074e76abc8d205b3ec0a2e[int32] = 1

text: select

top 1 * from [products] where ([products].[productid] = @c99aa7541e1543aca08c28f65c7b1d4d)

parameters: @c99aa7541e1543aca08c28f65c7b1d4d[int32] = 1

text: select

top 1 * from [products] where ([products].[productid] = @c8f9ce2df63f451aa09cbc4fa62acd9c)

parameters: @c8f9ce2df63f451aa09cbc4fa62acd9c[int32] = 1

text: select

top 1 * from [products] where ([products].[productid] = @d786265aa9bd40bfbc253814d6c16b13)

parameters: @d786265aa9bd40bfbc253814d6c16b13[int32] = 1

執行了5次查詢。

再設定 enable

="true",開啟快取。

再檢視一下執行的sql:

top 1 * from [products] where ([products].[productid] = @075ce07012884a21878604c197ddb7cc)

parameters: @075ce07012884a21878604c197ddb7cc[int32] = 1

只執行了一次sql連線。

後面的四次都是直接從快取中讀取的。

再次執行,所有的查詢都是直接從快取中返回回來,沒有連線資料庫。

測試快取檔案依賴:

list

list = new

list

();for (int i = 0; i < 2; i++)

system.threading.thread.sleep(2000);

for (int i = 0; i < 3; i++)

檢視sql:

top 1 * from [products] where ([products].[productid] = @aa4964dae36c479792186ea95ce10b6e)

parameters: @aa4964dae36c479792186ea95ce10b6e[int32] = 3

text: select

top 1 * from [products] where ([products].[productid] = @e614d6bbc84c4603b159e30644665e07)

parameters: @e614d6bbc84c4603b159e30644665e07[int32] = 3

執行了兩次,當修改檔案後,快取失效重新從資料庫查詢資料。

其實測試的有時候輸出一條sql,可能是執行的太快,快取失效來不及。

所以後來才加了system.threading.thread.sleep(2000);

再次重新整理,就只輸出一條sql,只執行一次,也就是修改1.txt檔案後才重新查詢資料庫。

查詢判斷是否有快取配置是根據 from()這裡的products來判斷是否存在快取配置的。

對於todatareader()查詢,是不會快取的。

當然用到todatareader的查詢的其他方法也不會快取,例如上一節中的exists

(whereclip where)方法。

下一節將講述自定義快取。

資料庫元件 Hxj Data (十七) (事務)

元件提供了簡單的事務,並沒有過多的封裝。先上個例子 using dbtrans trans dbsession.default.begintransaction trans.commit 必須提交,不然就執行不成功了。如果使用try catch的寫法如下 dbtrans trans dbsessio...

MySQL資料庫8(二十二)變數

mysql本質是一種程式語言,需要很多變數來儲存資料。mysql中有很多的屬性控制都是通過mysql中固有的變數來實現的。系統內部定義的變數,系統變數針對所有使用者 mysql客戶端 有效 mysql允許使用者使用select查詢變數的資料值 系統變數 基本語法 select 變數名 分為兩種修改方...

資料庫元件 Hxj Data (四)(新增操作篇)

上一節講述如何使用查詢。這節將講新增資料操作即insert方法的使用.先上例子 使用asp.net 這個是頁面html cs後台按鈕 protected void button1 click object sender,eventargs e 這樣就完成了乙個新增操作,不多。其中entityutil...