1. 程式人生 > >mybatis整合ehcache分散式快取框架

mybatis整合ehcache分散式快取框架

mybatis提供了一個cache介面,如果要實現自己的快取邏輯,實現cache介面開發即可。

mybatis和ehcache整合,mybatis和ehcache整合包中提供了一個cache介面的實現類。

1.4.3    第一步加入ehcache包

 

1.4.4    整合ehcache

配置mapper中cache中的type為ehcache對cache介面的實現型別。

<mappernamespace='cn.hpu.mybatis.mapper.UserMapper'>

<!-- 開啟本mappernamespace下的二級快取

   type

:指定cache介面實現類,mybatis預設使用PerpetualCache

要和eache整合,需要配置typeehcahe實現cache介面的型別

 -->

<cachetype='org.mybatis.caches.ehcache.EhcacheCache'>

</cache>

可以根據需求調整快取引數:

<cachetype='org.mybatis.caches.ehcache.EhcacheCache'>

        <propertyname='timeToIdleSeconds'value='3600'/>

        <propertyname='timeToLiveSeconds'value='3600'/>

        <!-- ehcache引數maxElementsInMemory-->

<propertyname='maxEntriesLocalHeap'value='1000'/>

       <!-- ehcache引數maxElementsOnDisk -->

        <propertyname='maxEntriesLocalDisk'value='10000000'/>

        <property

name='memoryStoreEvictionPolicy'value='LRU'/>

    </cache>

1.4.5    加入ehcache的配置檔案

classpath下配置ehcache.xml

<ehcachexmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'

    xsi:noNamespaceSchemaLocation='../config/ehcache.xsd'>

    <diskStorepath='F:\develop\ehcache'/>

    <defaultCache

maxElementsInMemory='1000'

       maxElementsOnDisk='10000000'

       eternal='false'

       overflowToDisk='false'

       timeToIdleSeconds='120'

       timeToLiveSeconds='120'

       diskExpiryThreadIntervalSeconds='120'

       memoryStoreEvictionPolicy='LRU'>

    </defaultCache>

</ehcache>

屬性說明:

diskStore:指定資料在磁碟中的儲存位置。

defaultCache:當藉助CacheManager.add('demoCache')建立Cache時,EhCache便會採用<defalutCache/>指定的的管理策略

以下屬性是必須的:

maxElementsInMemory - 在記憶體中快取的element的最大數目

maxElementsOnDisk - 在磁碟上快取的element的最大數目,若是0表示無窮大

eternal - 設定快取的elements是否永遠不過期。如果為true,則快取的資料始終有效,如果為false那麼還要根據timeToIdleSecondstimeToLiveSeconds判斷

overflowToDisk- 設定當記憶體快取溢位的時候是否將過期的element快取到磁碟上

以下屬性是可選的:

timeToIdleSeconds - 當快取在EhCache中的資料前後兩次訪問的時間超過timeToIdleSeconds的屬性取值時,這些資料便會刪除,預設值是0,也就是可閒置時間無窮大

timeToLiveSeconds - 快取element的有效生命期,預設是0.,也就是element存活時間無窮大

       diskSpoolBufferSizeMB 這個引數設定DiskStore(磁碟快取)的快取區大小.預設是30MB.每個Cache都應該有自己的一個緩衝區.

diskPersistentVM重啟的時候是否啟用磁碟儲存EhCache中的資料,預設是false

diskExpiryThreadIntervalSeconds - 磁碟快取的清理執行緒執行間隔,預設是120秒。每個120s,相應的執行緒會進行一次EhCache中資料的清理工作

memoryStoreEvictionPolicy - 當記憶體快取達到最大,有新的element加入的時候,移除快取中element的策略。預設是LRU(最近最少使用),可選的有LFU(最不常使用)和FIFO(先進先出)

1.5  二級應用場景

對於訪問多的查詢請求且使用者對查詢結果實時性要求不高,此時可採用mybatis二級快取技術降低資料庫訪問量,提高訪問速度,業務場景比如:耗時較高的統計分析sql、電話賬單查詢sql等。

         實現方法如下:通過設定重新整理間隔時間,由mybatis每隔一段時間自動清空快取,根據資料變化頻率設定快取重新整理間隔flushInterval,比如設定為30分鐘、60分鐘、24小時等,根據需求而定。

1.6  二級快取侷限性

         mybatis二級快取對細粒度的資料級別的快取實現不好對同時快取較多條資料的快取,比如如下需求:對商品資訊進行快取,由於商品資訊查詢訪問量大,但是要求使用者每次都能查詢最新的商品資訊,此時如果使用mybatis的二級快取就無法實現當一個商品變化時只重新整理該商品的快取資訊而不重新整理其它商品的資訊,因為mybaits的二級快取區域以mapper為單位劃分,當一個商品資訊變化會將所有商品資訊的快取資料全部清空。解決此類問題需要在業務層根據需求對資料有針對性快取。需要使用三級快取