天天看點

Mybatis的緩存機制(一)

       本文主要講解MyBatis非常棒的緩存機制的設計原理,給讀者們介紹一下MyBatis的緩存機制的輪廓,然後會分别針對緩存機制中的方方面面展開讨論。

MyBatis将資料緩存設計成兩級結構,分為一級緩存、二級緩存:

       一級緩存是Session會話級别的緩存,位于表示一次資料庫會話的SqlSession對象之中,又被稱之為本地緩存。一級緩存是MyBatis内部實作的一個特性,使用者不能配置,預設情況下自動支援的緩存,使用者沒有定制它的權利(不過這也不是絕對的,可以通過開發插件對它進行修改);

       二級緩存是Application應用級别的緩存,它的是生命周期很長,跟Application的聲明周期一樣,也就是說它的作用範圍是整個Application應用。

  MyBatis中一級緩存和二級緩存的組織如下圖所示:

Mybatis的緩存機制(一)

 一級緩存的工作機制:

      一級緩存是Session會話級别的,一般而言,一個SqlSession對象會使用一個Executor對象來完成會話操作,Executor對象會維護一個Cache緩存,以提高查詢性能。關于一級緩存的詳細實作,我已經在《深入了解mybatis原理》 MyBatis的一級緩存實作詳解 及使用注意事項 一文中有非常詳盡的讨論,讀者可以前去了解。

二級緩存的工作機制:

       如上所言,一個SqlSession對象會使用一個Executor對象來完成會話操作,MyBatis的二級緩存機制的關鍵就是對這個Executor對象做文章。如果使用者配置了"cacheEnabled=true",那麼MyBatis在為SqlSession對象建立Executor對象時,會對Executor對象加上一個裝飾者:CachingExecutor,這時SqlSession使用CachingExecutor對象來完成操作請求。CachingExecutor對于查詢請求,會先判斷該查詢請求在Application級别的二級緩存中是否有緩存結果,如果有查詢結果,則直接傳回緩存結果;如果緩存中沒有,再交給真正的Executor對象來完成查詢操作,之後CachingExecutor會将真正Executor傳回的查詢結果放置到緩存中,然後在傳回給使用者。

     MyBatis的二級緩存設計得比較靈活,你可以使用MyBatis自己定義的二級緩存實作;你也可以通過實作org.apache.ibatis.cache.Cache接口自定義緩存;也可以使用第三方記憶體緩存庫,如Memcached等,這個我們會在後續的文章中詳細讨論。

Mybatis的緩存機制(一)
Mybatis的緩存機制(一)

繼續閱讀