mybatis二級快取應用及與ehcache整合
mybaits的二級快取是mapper範圍級別,除了在SqlMapConfig.xml設定二級快取的總開關,還要在具體的mapper.xml中開啟二級快取。
1.開啟mybatis的二級快取
在核心配置檔案SqlMapConfig.xml中加入
2.匯入ehcache相關jar包
ehcache-core-2.6.5.jar
mybatis-ehcache-1.0.2.jar
3.在classpath下加入ehcache.xml檔案
屬性說明:
diskStore:指定資料在磁碟中的儲存位置。
defaultCache:當藉助CacheManager.add("demoCache")建立Cache時,EhCache便會採用<defalutCache/>指定的的管理策略
以下屬性是必須的:
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(先進先出)
根據需求調整快取引數:
log4j列印如下日誌,說明快取開啟成功:
DEBUG [main] - Cache Hit Ratio [cn.itcast.jdbc.mapper.UserMapper]: 0.0
對於訪問多的查詢請求且使用者對查詢結果實時性要求不高,此時可採用mybatis二級快取技術降低資料庫訪問量,提高訪問速度,業務場景比如:耗時較高的統計分析sql、電話賬單查詢sql等。
實現方法如下:通過設定重新整理間隔時間,由mybatis每隔一段時間自動清空快取,根據資料變化頻率設定快取重新整理間隔flushInterval,比如設定為30分鐘、60分鐘、24小時等,根據需求而定。
侷限性:
mybatis二級快取對細粒度的資料級別的快取實現不好,比如如下需求:對商品資訊進行快取,由於商品資訊查詢訪問量大,但是要求使用者每次都能查詢最新的商品資訊,此時如果使用mybatis的二級快取就無法實現當一個商品變化時只重新整理該商品的快取資訊而不重新整理其它商品的資訊,因為mybaits的二級快取區域以mapper為單位劃分,當一個商品資訊變化會將所有商品資訊的快取資料全部清空。解決此類問題需要在業務層根據需求對資料有針對性快取。
相關文章
- Mybatis 整合 ehcache快取MyBatis快取
- Mybatis 二級快取應用 (21)MyBatis快取
- Mybatis整合二級快取與同時使用快取與事務存在的坑MyBatis快取
- mybatis快取-二級快取MyBatis快取
- MyBatis快取機制(一級快取,二級快取)MyBatis快取
- Mybatis的二級快取、使用Redis做二級快取MyBatis快取Redis
- Mybatis的二級快取MyBatis快取
- Mybatis二級快取使用MyBatis快取
- SpringBoot2 整合Ehcache元件,輕量級快取管理Spring Boot元件快取
- mybatis二級快取引數MyBatis快取
- mybatis快取之一級快取(二)MyBatis快取
- Ehcache介紹及整合Spring實現快取記憶體Spring快取記憶體
- Springboot應用快取實踐之:Ehcache加持Spring Boot快取
- 另一種快取,Spring Boot 整合 Ehcache快取Spring Boot
- mybatis原始碼學習:一級快取和二級快取分析MyBatis原始碼快取
- springboot mybatis 專案框架原始碼 shiro 整合程式碼生成器 ehcache快取Spring BootMyBatis框架原始碼快取
- Java快取EhcacheJava快取
- Mybatis 一級快取和二級快取原理區別 (圖文詳解)MyBatis快取
- mybatis基礎系列(四)——關聯查詢、延遲載入、一級快取與二級快取MyBatis快取
- 快取初見——EhCache快取
- EhCache快取使用教程快取
- mybatis原始碼詳細解析(2)---- 一級,二級快取MyBatis原始碼快取
- myBatis原始碼解析-二級快取的實現方式MyBatis原始碼快取
- mybatis快取之一級快取(一)MyBatis快取
- Hibernate一級快取(session)與二級快取(sessionFactory)的知識點。快取Session
- MySQL與Redis實現二級快取MySqlRedis快取
- Mybatis的快取——一級快取和原始碼分析MyBatis快取原始碼
- 深入理解 MyBatis的二級快取的設計原理MyBatis快取
- 深入淺出MyBatis:MyBatis與Spring整合及實用場景MyBatisSpring
- MybatisPlus二級快取MyBatis快取
- SpringBoot快取管理(二) 整合Redis快取實現Spring Boot快取Redis
- 被mybatis一級快取坑了MyBatis快取
- Java快取機制:Ehcache與Guava Cache的比較Java快取Guava
- springboot+mybatis+mybaits plus 整合與基本應用Spring BootMyBatisAI
- Spring Cache與Ehcache 3整合Spring
- SpringBoot+Redis作為二級快取整合的基本DemoSpring BootRedis快取
- SpringBoot中Shiro快取使用Redis、EhcacheSpring Boot快取Redis
- MyBatis 快取MyBatis快取
- Redis應用場景及快取問題Redis快取