mybatis整合分佈式緩存框架

什麼是分佈式緩存

爲了提高系統的併發性能,通常會對系統進行分佈式部署(如集羣部署方式)
在這裏插入圖片描述
如上圖,服務器1上的mybatis的二級緩存位於服務器1上,服務器2上的mybatis的二級緩存位於服務器2上。

所以如果不使用分佈式緩存,緩存的數據就會在各個服務器上單獨存儲,因此,需要使用分佈式緩存工具對緩存數據進行集中管理。

在這裏插入圖片描述

mybatis無法實現分佈式緩存,所以需要和第三方分佈式緩存框架進行整合,如redis, memcached, ehcache等。

即使拋開分佈式緩存,就普通緩存來說,mybatis也不是專業做緩存的。緩存數據是在內存中存儲的,緩存工具需要對數據進行一些壓縮處理,或安全的編碼處理等,mybatis只是簡單地把數據存到內存中了。

整合方法

mybatis提供了一個cache接口,如果要實現自己的緩存邏輯,可以通過實現cache接口進行開發。 比如 mybatis 和 ehcache 的整合包中就提供了一個cache接口的實現類。

如果要將mybatis和redis進行整合,就需要考慮如何實現這個cache接口,然後在接口內部去操作redis的數據結構。

在這裏插入圖片描述
在這裏插入圖片描述
getId(), 即獲取cache的唯一標識,即key值
putObject(key, value),向緩存中寫入數據,value是select查詢出來的結果集
getObject(key) , 根據key值,從緩存中取出value

mybatis的一級緩存和二級緩存都是以HashMap結構存儲的。

PerpetualCache是mybatis默認實現的Cache類,可以仿照這個寫cache實現類。

在這裏插入圖片描述
在相應的mapper.xml配置文件中,配置該mapper的二級緩存:
在這裏插入圖片描述

mybatis整合ehcache

  1. 加入ehcache包
    在這裏插入圖片描述
  2. 在相應的mapper.xml配置文件中進行配置,將cache標籤的type屬性設置成Ehcache對mybatis的Cache接口的實現類型 EhcacheCache
    在這裏插入圖片描述
  3. 加入ehcache的配置文件
    在classpath下創建ehcache.xml配置文件,配置如下內容:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
	<diskStore path="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便會採用指定的的管理策略
以下屬性是必須的:
 maxElementsInMemory - 在內存中緩存的element的最大數目
 maxElementsOnDisk - 在磁盤上緩存的element的最大數目,若是0表示無窮大
 eternal - 設定緩存的elements是否永遠不過期。如果爲true,則緩存的數據始終有效,如果爲false那麼還要根據timeToIdleSeconds,timeToLiveSeconds判斷
 overflowToDisk - 設定當內存緩存溢出的時候是否將過期的element緩存到磁盤上
以下屬性是可選的:
 timeToIdleSeconds - 當緩存在EhCache中的數據前後兩次訪問的時間超過timeToIdleSeconds的屬性取值時,這些數據便會刪除,默認值是0,也就是可閒置時間無窮大
 timeToLiveSeconds - 緩存element的有效生命期,默認是0.,也就是element存活時間無窮大
diskSpoolBufferSizeMB 這個參數設置DiskStore(磁盤緩存)的緩存區大小.默認是30MB.每個Cache都應該有自己的一個緩衝區.
 diskPersistent - 在VM重啓的時候是否啓用磁盤保存EhCache中的數據,默認是false。
 diskExpiryThreadIntervalSeconds - 磁盤緩存的清理線程運行間隔,默認是120秒。每個120s,相應的線程會進行一次EhCache中數據的清理工作
 memoryStoreEvictionPolicy - 當內存緩存達到最大,有新的element加入的時候, 移除緩存中element的策略。默認是LRU(最近最少使用),可選的有LFU(最不常使用)和FIFO(先進先出)

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