2023-01-12 一、Mybatis中緩存機制 1、一級緩存 (1)概述:一級緩存(即本地緩存或SqlSession級別緩存) (2)特點: ①一級緩存預設開啟 ②不能關閉 ③可以清空 (3)緩存原理 ①當第一次獲取數據時,需要先從資料庫中載入數據,將數據緩衝到Mybatis一級緩存中(緩存底層 ...
2023-01-12
一、Mybatis中緩存機制
1、一級緩存
(1)概述:一級緩存(即本地緩存或SqlSession級別緩存)
(2)特點:
①一級緩存預設開啟
②不能關閉
③可以清空
(3)緩存原理
①當第一次獲取數據時,需要先從資料庫中載入數據,將數據緩衝到Mybatis一級緩存中(緩存底層實現原理是Map,key:hashCode+查詢的SqlId+編寫的sql查詢語句+參數)
②以後再次獲取數據時,先從一級緩存中獲取,如未獲取到數據,再從資料庫中獲取數據
(4)一級緩存五種失效情況
①不同的SqlSession對應不同的一級緩存(例如:將第一次查詢的sqlSession關閉了,之後開啟一個新的sqlSession)
②同一個sqlSession但是查詢條件不同
③同一個sqlSession兩次查詢期間執行了任何一次增刪改查操作
④同一個sqlSession兩次查詢期間手動清空了緩存
⑤同一個sqlSession兩次查詢期間提交了事務
2、二級緩存
(1)二級緩存概述
(1)二級緩存(即全局作用域緩存)
(2)SqlSessionFactory級別緩存
(2)二級緩存的特點
①二級緩存預設關閉,需要開啟時才能使用
②二級緩存需要提交sqlSession或關閉sqlSession時,才會緩存
(3)二級緩存使用的步驟
①全局配置文件中開啟二級緩存
<setting name="cacheEnabled" value="true"></setting>
②需要使用二級緩存的映射文件使用cache配置緩存
③註意:POJO需要實現Serializable介面
在POJO中的類中添加“implements Serializable”
之後點擊小扳手圖標,將如下的設置進行勾選。
之後將游標放置在POJO類的後面,同時按“Alt+Enter”,在類中會添加“serialVersionUID”的設置
④關閉sqlSession或提交sqlSession時,將數據緩存到二級緩存
(4)二級緩存中的原理
①當第一次獲取數據時,需要先從資料庫中獲取數據,將數據緩衝到Mybatis一級緩存中;當提交或關閉SqlSession時,將數據緩存至二級緩存。
②以後再次獲取數據時,先從一級緩存中獲取數據,如一級數據沒有指定數據,再去二級緩存中獲取數據。如二級緩存也沒有指定數據時,需要去資料庫中獲取數據。
(5)二級緩存的屬性
①eviction="FIFO":緩存清除“回收”策略
LRU——最近最少使用的:移除最長時間不被使用的對象
FIFO——先進先出:按對象進入緩存的順序來移除它們。
②flushInterval:刷新間隔,單位毫秒
③size:引用數目,正整數
④readOnly:只讀,true/false
(6)二級緩存的失效情況
在兩次查詢之間,執行增刪改操作,會同時清空一級緩存和二級緩存
SqlSession.clearCache():只是用來清除一級緩存。
3、第三方緩存
EhCache:是一個純java的進程內緩存框架,具有快速、精幹等特點,是Hibernate中預設的CacheProvider
(1)使用步驟
①導入jar包
在pom.xml中的<dependencies>中添加jar包
<!-- https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache --> <dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.0.3</version> </dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.2</version> <scope>test</scope> </dependency>
②編寫核心配置文件
<?xml version="1.0" encoding="UTF-8" ?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"> <!--diskStore: 持久化到磁碟上時的存儲位置--> <diskStore path="E:\mybatis\ehcache"/> <defaultCache maxElementsInMemory="512" maxElementsOnDisk="10000000" eternal="false" overflowToDisk="true" timeToIdleSeconds="120" timeToLiveSeconds="120" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> </defaultCache> </ehcache>
③載入第三方緩存(映射文件)
<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>
④開始使用
註意:
第三方緩存,需要建立在二級緩存基礎上(即需要開啟二級緩存)