mybatis_15整合ehcache

 

3.4 整合ehcache

Mybatis自己是一個持久層框架,它不是專門的緩存框架,因此它對緩存的實現不夠好,不能支持分佈式。緩存

 

Ehcache是一個分佈式的緩存框架。mybatis

 

什麼是分佈式

系統爲了提升性能,一般會對系統採用分佈式部署(集羣部署方式)app

 

  

整合思路

Cache是一個接口,它的默認實現是mybatis的PerpetualCache。若是想整合mybatis的二級緩存,那麼實現Cache接口便可。框架


 

  

添加jar包

 

 

 

設置映射文件中cache標籤

的type值爲ehcache的實現類jvm

 


在src下添加ehcache的配置文件
 分佈式

 

 

  • maxElementsInMemory :設置基於內存的緩存中可存放的對象最大數目
  • eternal:設置對象是否爲永久的,true表示永不過時,此時將忽略
  • timeToIdleSeconds 和 timeToLiveSeconds屬性; 默認值是false
  • timeToIdleSeconds:設置對象空閒最長時間,以秒爲單位, 超過這個時間,對象過時。當對象過時時,EHCache會把它從緩存中清除。若是此值爲0,表示對象能夠無限期地處於空閒狀態。
  • timeToLiveSeconds:設置對象生存最長時間,超過這個時間,對象過時。若是此值爲0,表示對象能夠無限期地存在於緩存中. 該屬性值必須大於或等於 timeToIdleSeconds 屬性值
  • overflowToDisk:設置基於內在的緩存中的對象數目達到上限後,是否把溢出的對象寫到基於硬盤的緩存中
  • diskPersistent 當jvm結束時是否持久化對象 true false 默認是false
  • diskExpiryThreadIntervalSeconds 指定專門用於清除過時對象的監聽線程的輪詢時間

memoryStoreEvictionPolicy - 當內存緩存達到最大,有新的element加入的時候, 移除緩存中element的策略。性能

 

flashInterval:設置刷新時間(清空緩存)測試

默認是LRU(最近最少使用),可選的有LFU(最不常使用)和FIFO(先進先出)spa

 

測試:用上一篇文章中二級緩存例子便可

 

二級緩存應用場景

使用場景:對於訪問響應速度要求高,可是實時性不高的查詢,能夠採用二級緩存技術線程

注意:在使用二級緩存的時候,要設置一下刷新間隔(cache標籤中有一個flashInterval屬性)來定時刷新二級緩存,這個刷新間隔根據具體需求來設置,好比設置30分鐘、60分鐘等,單位爲毫秒。

侷限性

Mybatis二級緩存對細粒度的數據,緩存實現很差。

場景:

對商品信息進行緩存,因爲商品信息查詢訪問量大,可是要求用戶每次查詢都是最新的商品信息,此時若是使用二級緩存,就沒法實現當一個商品發生變化只刷新該商品的緩存信息而不刷新其餘商品緩存信息,由於二級緩存是mapper級別的,當一個商品的信息發送更新,全部的商品信息緩存數據都會清空。

解決此類問題,須要在業務層根據須要對數據有針對性的緩存。

 

好比能夠對常常變化的 數據操做單獨放到另外一個namespace的mapper中。

相關文章
相關標籤/搜索