? ? ? ? ? ? ? ?
今天給大家分享一下MyBatis緩存知識介紹,希望對大家日常的開發當中能有所幫助!
一、MyBatis一級緩存
1、一級緩存介紹
當我們的程序MyBatis開啟一次和數據庫的會話,MyBatis會自動創建出一個SqlSession對象表示這一次數據庫的會話。在同一個數據庫會話當中,MyBatis提供了一級緩存的方案優化這部分場景,針對相同的SQL查詢語句,會優先命中一級緩存,避免再次對數據庫進行查詢,從而提高查詢性能、減輕數據庫的壓力。
? ? ? ? ? ? ? ?
開啟一級緩存
MyBatis的配置文件加上如下:
<setting name="localCacheScope" value="SESSION"/>
注意:localCacheScope 值有兩個 SESSION(開啟一級緩存)/Statement(關閉一級緩存)
一級緩存失效場景
SqlSeesion實例不同
SqlSeesion實例相同,查詢條件不同
SqlSeesion對象相同,查詢條件也相同,但兩次查詢之間執行了增刪改操作
SqlSeesion對象相同,兩次查詢條件相同,中間無其它增刪改操作,但使用了clearCache()方法
總結
MyBatis一級緩存的生命周期和SqlSession一致。默認是開啟狀態。
MyBatis一級緩存采用HashMap性能較差
分布式環境下對數據庫操作容易引起臟數據,不推薦開啟MyBatis一級緩存
二、MyBatis二級緩存
1、二級緩存介紹
MyBatis一級緩存生命周期是一個SqlSession內部,如果多個 SqlSession 需要共享緩存,則需要開啟二級緩存,開啟二級緩存后,會使用 CachingExecutor 裝飾 Executor,進入一級緩存的查詢流程前,先在CachingExecutor 進行二級緩存的查詢。
? ? ? ? ? ? ? ?
2、為什么有二級緩存?
1、為了避免和數據庫頻繁交互。這是設計緩存的主要原因。
2、當Spring和MyBatis整合時,每次查詢之后都要進行關閉sqlsession,關閉之后數據被清空。所以MyBatis和Spring整合之后,一級緩存是沒有意義的。如果開啟二級緩存,關閉sqlsession后,會把該sqlsession一級緩存中的數據添加到mapper namespace的二級緩存中。這樣,緩存在sqlsession關閉之后依然存在。
當開啟二級緩存數據庫查詢流程先后順序為:二級緩存 -> 一級緩存 -> 數據庫
3、如何開啟二級緩存
二級緩存默認是不開啟的,需要手動開啟二級緩存,MyBatis的配置文件加上如下:
<settings><setting name = "cacheEnabled" value = "true" /></settings>
然后在還需要在 Mapper 的xml 配置文件中加入?<cache>標簽
cache屬性介紹
eviction:設置回收策略,默認是LRU策略。
LRU - 最近最少回收,移除最長時間不被使用的對象
FIFO - 先進先出,按照緩存進入的順序來移除它們
SOFT - 軟引用,移除基于垃圾回收器狀態和軟引用規則的對象
WEAK - 弱引用,更積極的移除基于垃圾收集器和弱引用規則的對象
flushinterval:緩存刷新間隔,緩存多長時間刷新一次,默認不清空,設置一個毫秒值
readOnly: 是否只讀;true 只讀,MyBatis 認為所有從緩存中獲取數據的操作都是只讀操作,不會修改數據。MyBatis 為了加快獲取數據,直接就會將數據在緩存中的引用交給用戶。不安全,速度快。讀寫(默認):MyBatis 覺得數據可能會被修改
size : 緩存可存放多少個元素
type: 指定自定義緩存的全類名(實現Cache 接口即可)
blocking:若緩存中找不到對應的key,是否會一直blocking,直到有對應的數據進入緩存。
注意:
1、在事務提交之前,并不會真正存儲到二級緩存,而是先存儲到一個臨時屬性,等事務提交之后才會真正存儲到二級緩存。因此需要commit事務之后才能生效。
2、如果使用的是MyBatis默認緩存,結果集對象需要實現序列化接口(Serializable),否則會報錯。
4、二級緩存適用場景
1、適合頻繁訪問且用戶對查詢結果實時性要求不是很高的查詢,
這時采用二級緩存可降低數據庫訪問量,提高數據庫的性能,例如:查詢耗時較高的統計報表SQL、按固定時間維度查詢的SQL(每月的訂單信息等等)。
2、適合查詢多寫入少的場景開啟。
因為任何對數據庫的(insert、update、delete)操作都會觸發緩存的更新,從而造成緩存失效。
5、二級緩存失效場景
第一次SqlSession 未提交
對數據庫對應的數據表執行了的(insert、update、delete)操作
6、總結
mybatis二級緩存針對大多數的業務系統都不推薦使用,因為業務系統數據操作比較頻繁、自帶的二級緩存性能也不是很高。二級緩存很難起到實際的作用。可以引用第三方緩存。
IT技術分享社區
個人博客網站:https://programmerblog.xyz
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識