ibatis中cachemode的配置

cachemodel是ibatis裏面自帶的緩存機制,正確的應用能很好提升我們系統的性能。

使用方法:在sqlmap的配置文件中加入

<cacheModel type="LRU" id="article_cache" readOnly="true" serialize="false">
<flushInterval hours="24"/>
<flushOnExecute statement="articleLists.insertArticle"/>
<property name="cache_size" value="50"/> 
</cacheModel>

在查詢語句中使用緩存

<select id="getArticles" resultClass="articleList" parameterClass="articleList" cacheModel="article_cache">

先對cachemodel中一些用法進行解釋一下:

type:是緩存的類型,ibatis中有4種方式,分別爲MEMORY、LRU、FIFO、OSCACHE

MEMORY是內存緩存,和Java內存管理機制類似分爲[SOFT、WEAK、STRONG]

LRU是使用最近最少使用策略

FIFO是使用先進先出策略

OSCACHE是通過第三方的緩存插件實現

id:是cachemodel的一個標識

readOnly:指緩存的數據對象是隻讀還是可讀寫,默認只讀,這裏的只讀並不是意味着數據對象一旦放入緩存中就無法再對數據進行修改。而是當數據對象發生變化的時候,如數據對象的某個屬性發生了變化,則此數據對象就將被從緩存中廢除,下次需要重新從數據庫讀取數據,構造新的數據對象。而readOnly="false"則意味着緩存中的數據對象可更新.
serialize:只有在readOnly爲false的情況下才生效,因爲在readOnly爲true時,所有數據對象相同,只有可讀寫時,纔會出現不同的session擁有不同的數據對象副本。

flushInterval:指定緩存自動刷新的時間,可以爲hours,minutes,seconds,milliseconds.

flushOnExecute:指定在發生哪些操作時,更新緩存。

property:不同type的cachemodel有不同的屬性。

----------------------------------------------------------------------------

下面是本人自己做的實驗的一些結果:

(1)當readOnly=true ,serialize=false,只指定insert更新緩存時,我在update一個article的屬性後,發現之前的相同的查詢條件查詢結果是緩存的內容,沒取到更新的結果;當我改變查詢條件時,出現了更新的結果。由此可見當readonly=true,查詢條件不變時,即使發生更新,緩存仍然有效;而查詢條件變更時,緩存失效,用新的sql去數據庫查詢。當發生insert操作時,不管查詢條件是否變化,都重新去數據庫查詢,緩存被更新。

(2)當readOnly=false,serialize=false,只指定insert更新緩存時,update一個article屬性後,緩存失效,重新去數據庫查詢

綜上來看,對更新比較頻繁的數據,使不使用感覺效率差不多,對更新不是很頻繁的數據,使用緩存效率還是能提升的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章