MyBatis實戰(一)-快取機制的設計
1 資料快取設計結構
1.1 一級快取
Session會話級別的快取,位於表示一次資料庫會話的 SqlSession
物件之中,又被稱之為 本地快取
一級快取是MyBatis內部實現的一個特性, 使用者不能配置
, 預設情況下自動支援的快取
,一般使用者沒有定製它的權利
1.2 二級快取
Application應用級別的快取,生命週期長,跟 Application 的生命週期一樣,即作用範圍為整個 Application 應用

快取架構
2 工作機制
2.1 一級快取的工作機制
一級快取是 Session 會話級別的,一般而言,一個 SqlSession 物件會使用一個 Executor 物件來完成會話操作, Executor 物件會維護一個 Cache 快取,以提高查詢效能

2.2 二級快取的工作機制
如上所言,一個 SqlSession 物件會使用一個 Executor 物件來完成會話操作, MyBatis 的二級快取機制的關鍵就是對這個 Executor 物件做文章
如果使用者配置了 cacheEnabled=true
,那麼在為 SqlSession 物件建立 Executor 物件時,會對 Executor 物件加上一個裝飾者 CachingExecutor
,這時 SqlSession 使用 CachingExecutor
物件來完成操作請求
CachingExecutor對於查詢請求,會先判斷該查詢請求在 Application 級別的二級快取中是否有快取結果
- 如果有查詢結果,則直接返回快取結果
- 如果快取未命中,再交給真正的 Executor 物件來完成查詢操作,之後 CachingExecutor 會將真正 Executor 返回的查詢結果放置到快取中,然後再返回給使用者
MyBatis的二級快取設計得比較靈活,可以使用 MyBatis 自己定義的二級快取實現
也可以通過實現 org.apache.ibatis.cache.Cache 介面自定義快取
也可以使用第三方記憶體快取庫,如 Memcached 等

