mybatis緩存

mybatis緩存理解

前幾天在面試中被問到了mybatis的緩存問題。當時才突然發現已經忘得差不多了。然後又查資料,看文檔,再從大腦中將其喚醒。首先得明確一點,mybatis有兩級緩存。分爲一級緩存和二級緩存。要說mybatis緩存,還得從mybatis的基本結構說起。

                                image.png

以上是mybatis的基本結構, 

一級緩存是Session會話級別的,一般而言,一個SqlSession對象會使用一個Executor對象來完成會話操作,Executor對象會維護一個Cache緩存,以提高查詢性能。假如說mybatis只使用了一級緩存,那麼他們的原理應該是這個樣子的。

                image.png

二級緩存機制的關鍵就是對這個Executor對象做文章。如果用戶配置了"cacheEnabled=true",那麼MyBatis在爲SqlSession對象創建Executor對象時,會對Executor對象加上一個裝飾者:CachingExecutor,這時SqlSession使用CachingExecutor對象來完成操作請求。CachingExecutor對於查詢請求,會先判斷該查詢請求在Application級別的二級緩存中是否有緩存結果,如果有查詢結果,則直接返回緩存結果;如果緩存中沒有,再交給真正的Executor對象來完成查詢操作,之後CachingExecutor會將真正Executor返回的查詢結果放置到緩存中,然後在返回給用戶。MyBatis的二級緩存設計得比較靈活,你可以使用MyBatis自己定義的二級緩存實現;你也可以通過實現org.apache.ibatis.cache.Cache接口自定義緩存;也可以使用第三方內存緩存庫,如Memcached等。

                    image.png

緩存的使用,可以使得我們操作數據庫的次數大大減少。也就避免了對系統資源的浪費。因此,合理的使用緩存會使得系統的性能優化。本文只是對mybatis緩存原理的介紹。因此mybatis緩存的圖可以畫成這個樣子。

                    image.png





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章