448
技術社區[雲棲]
ibatis中使用緩存
一 什麼是緩存以及為什麼要使用緩存
從數據庫讀出數據後,該數據在某個緩衝區暫時被保存起來。當我們再次需要讀取該數據的時候,直接從該緩衝區中讀取,而不用再次訪問數據庫。我們知道數據庫連接是很昂貴的資源,減少對數據庫的訪問是提高性能的手段之一。
二 Ibatis中使用緩存的配置方法
①SqlMapConfig.xml
<sqlMapConfig>
<settings cacheModelsEnabled="true" />
......
</sqlMapConfig>
②StudentMapper.xml
<sqlMap namespace="student">
<typeAlias alias="student" type="cn.xy.Student" />
<!-- 配置緩存模型 -->
<cacheModel type="OSCache" readOnly="true"
serialize="true">
<flushInterval hours="24" />
<flushOnExecute statement="insertStu" />
<flushOnExecute statement="updateStu" />
<flushOnExecute statement="deleteStu" />
<property value="500" name="size" />
</cacheModel>
<resultMap >
<result property="id" column="ID" />
<result property="name" column="NAME" />
</resultMap>
<select resultMap="StudentMap" cacheModel="stu-cache">
select * from student
</select>
<insert parameterClass="student">
insert into student(Id,name) VALUES (#id#, #name#)
</insert>
.......
</sqlMap>
③ java代碼使用ibatis就不贅述了
三 緩存標簽詳解
1 id 一個標識,在下麵的select語句中將引用該標識。
2 Type cacheModel的實現類型,目前有如下4種實現:
①MEMORY(com.ibatis.sqlmap.engine.cache.memory.MemoryCacheController)
MEMORY cache實現使用java的軟引用類型來管理cache的行為,使用一個HashMap來保存當前需要緩存的數據對象的引用,當內存不足時java虛擬機將回收這些引用,從而清除cache。
②LRU(com.ibatis.sqlmap.engine.cache.lru.LruCacheController)
LRU Cache 實現用“近期最少使用”原則來確定如何從Cache中清除對象,當Cache溢出時,最近最少使用的對象將被從Cache中清除。
③FIFO(com.ibatis.sqlmap.engine.cache.fifo.FifoCacheController)
FIFO Cache實現用先進先出原則來確定如何從 Cache 中清除對象。即最先進入Cache的對象將從Cache中清除。
④OSCACHE(com.ibatis.sqlmap.engine.cache.oscache.OSCacheController)
OSCACHE Cache實現是OSCache2.0緩存引擎的一個Plugin,它具有高度的可配置性,分布式,高度的靈活性(很推薦使用該類型)OSCache可以通過oscache.properties文件進行緩存的相關配置。
3 readOnly readOnly的值表示緩存中的數據對象是否隻讀。若為true,則當數據對象發生變化時,數據對象就將被從緩存中廢除,下次需要重新從數據庫讀取數據,構造新的數據對象。而若為false,則意味著緩存中的數據對象可更新,不必從數據庫中讀取。
4 serialize 如果需要全局的數據緩存,CacheModel的serialize屬性必須被設為true。否則數據緩存隻對當前Session有效,局部緩存對係統的整體性能提升有限。在serialize="true"的情況下,如果有多個Session同時從Cache 中讀取某個數據對象,Cache將為每個Session返回一個對象的複本,也就是說,每個Session將得到包含相同信息的不同對象實例。因而Session可以對其從Cache獲得的數據進行存取而無需擔心多線程並發情況下的同步衝突。
5 <flushInterval hours="24">
指定多長時間清除緩存,例如指定每24小時強行清空緩存區的所有內容。
6 <flushOnExecute statement="insertStu"/>在執行指定的語句時將刷新數據庫。
7 Size
指定Cache的最大容量。
原帖地址:https://hnylj.iteye.com/blog/363066
最後更新:2017-04-03 16:49:30