07-MyBatis-緩存機制,從一級緩存到二級緩存

緩存,主要作用是提高了查詢性能,減少了跟數據庫交互的次數,從而也減輕了數據庫承受的壓力。


適用於讀多寫少的場景,如果數據變化頻率非常高,則不適用。

MyBatis的緩存分為一級緩存和二級緩存。

下面,我們通過做實驗,來掌握MyBatis的一級緩存和二級緩存的特點:

1,來,關門,上一級緩存

07-MyBatis-緩存機制,從一級緩存到二級緩存

觀察執行結果:

07-MyBatis-緩存機制,從一級緩存到二級緩存

再做一次實驗,中間修改對象的信息

07-MyBatis-緩存機制,從一級緩存到二級緩存

再做一次實驗,中間新增記錄

07-MyBatis-緩存機制,從一級緩存到二級緩存

一級緩存總結:

1,一級緩存模式是開啟狀態

2,一級緩存作用域在於SqlSession(大家可以關閉SqlSession,然後創建一個新的,再獲取對象,觀察實驗結果)

3,如果中間有對數據的更新操作,則將清空一級緩存。

下面,我們來看二級緩存(重點)

要使用二級緩存,需要經歷兩個步驟

1,開啟二級緩存(默認處於開啟狀態)

2,在Mapper.xml中,配置二級緩存(也支持在接口配置)

在標籤下面添加標籤即可

默認的二級緩存配置會有如下特點:

2.1 所有的Select語句將會被緩存

2.2 所有的更新語句(insert、update、delete)將會刷新緩存

2.3 緩存將採用LRU(Least Recently Used 最近最少使用)算法來回收

2.4 緩存會存儲1024個對象的引用

回收算法建議採用LRU,當然,還提供了FIFO(先進先出),SOFT(軟引用),WEAK(弱引用)等其他算法。

07-MyBatis-緩存機制,從一級緩存到二級緩存

3,做實驗,驗證二級緩存的效果:

07-MyBatis-緩存機制,從一級緩存到二級緩存

觀察結果:

07-MyBatis-緩存機制,從一級緩存到二級緩存

二級緩存關鍵說明:

當關閉了SqlSession之後,才會將查詢數據保存到二級緩存中(SqlSessionFactory)中,所以才有了上述的緩存命中率。MyBatis的二級緩存默認採用的是Map的實現。

4,衍生

其實,我們在開發中,可以集成第三方的緩存來保存MyBatis的二級緩存,常用的有EhCache和Redis

4.1 EhCache

MyBatis提供了一個項目實現,ehcache-cache

學習地址:https://github.com/mybatis/ehcache-cache

07-MyBatis-緩存機制,從一級緩存到二級緩存

ehcache的配置可以參照:http://www.ehcache.org/ehcache.xml

4.2 整合Redis

同樣,也提供了項目:https://github.com/mybatis/redis-cache

不過,目前還只有測試版本,等有穩定版了,推薦採用Redis的方式。

5,總結

什麼情況適合用二級緩存

1,以查詢為主的應用,讀多寫少

2,以單表操作為主的應用,多表關聯查詢時,會出現髒數據,當然可以設置關聯的表使用同一個二級緩存,不過這樣感覺好麻煩。


分享到:


相關文章: