緩存,主要作用是提高了查詢性能,減少了跟數據庫交互的次數,從而也減輕了數據庫承受的壓力。
適用於讀多寫少的場景,如果數據變化頻率非常高,則不適用。
MyBatis的緩存分為一級緩存和二級緩存。
下面,我們通過做實驗,來掌握MyBatis的一級緩存和二級緩存的特點:
1,來,關門,上一級緩存
觀察執行結果:
再做一次實驗,中間修改對象的信息
再做一次實驗,中間新增記錄
一級緩存總結:
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(弱引用)等其他算法。
3,做實驗,驗證二級緩存的效果:
觀察結果:
二級緩存關鍵說明:
當關閉了SqlSession之後,才會將查詢數據保存到二級緩存中(SqlSessionFactory)中,所以才有了上述的緩存命中率。MyBatis的二級緩存默認採用的是Map的實現。
4,衍生
其實,我們在開發中,可以集成第三方的緩存來保存MyBatis的二級緩存,常用的有EhCache和Redis
4.1 EhCache
MyBatis提供了一個項目實現,ehcache-cache
學習地址:https://github.com/mybatis/ehcache-cache
ehcache的配置可以參照:http://www.ehcache.org/ehcache.xml
4.2 整合Redis
同樣,也提供了項目:https://github.com/mybatis/redis-cache
不過,目前還只有測試版本,等有穩定版了,推薦採用Redis的方式。
5,總結
什麼情況適合用二級緩存
1,以查詢為主的應用,讀多寫少
2,以單表操作為主的應用,多表關聯查詢時,會出現髒數據,當然可以設置關聯的表使用同一個二級緩存,不過這樣感覺好麻煩。
閱讀更多 互聯網十年老兵 的文章