閱讀448 返回首頁    go 技術社區[雲棲]


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

  上一篇:go Oracle日期比較
  下一篇:go Oracle中的nvl函數