首先我是做web開發的,所以很多會偏向web的,元件使用的快取是system.web.httpruntime.cache。
元件在預設情況下是關閉快取的。
所以要開啟快取查詢要做一下配置。
先看一下例子配置:
<hxjcacheconfig 節點的 enable 表示是否開啟快取,預設是關閉狀態,除非顯式開啟 enableconfigsections
>
<
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
>
="true"。
entities 節點下的配置就是對實體查詢的快取配置。
<
add
key="northwindconnectionstring.products" value
="60">
add>
表示connectionstrings中的節點name
="northwindconnectionstring"的連線下的products表配置.
value
="60" 表示快取60秒。
所以一定要connectionstrings的name加上實體名,不然配置無效。
當然value也可以是快取依賴的檔案。
<表示products表的查詢快取依賴程式根目錄下的1.txt檔案。元件會判斷該檔案是否存在,不存在則該配置無效。add
key="northwindconnectionstring.products" value
="1.txt">
add>
那測試一下快取配置。
list我們設定 enablelist = new
list
();for (int i = 0; i < 2; i++)
for (int i = 0; i < 3; i++)
="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連線。
後面的四次都是直接從快取中讀取的。
再次執行,所有的查詢都是直接從快取中返回回來,沒有連線資料庫。
測試快取檔案依賴:
listlist = 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...