mybatis緩存設(shè)計(jì)思想

MyBatis將數(shù)據(jù)緩存設(shè)計(jì)成兩級(jí)結(jié)構(gòu),分為一級(jí)緩存、二級(jí)緩存:

一級(jí)緩存是Session會(huì)話級(jí)別的緩存,位于表示一次數(shù)據(jù)庫會(huì)話的SqlSession對(duì)象之中,又被稱之為本地緩存。一級(jí)緩存是MyBatis內(nèi)部實(shí)現(xiàn)的一個(gè)特性,用戶不能配置,默認(rèn)情況下自動(dòng)支持的緩存,

二級(jí)緩存是Application應(yīng)用級(jí)別的緩存,它的是生命周期很長,跟Application的聲明周期一樣,也就是說它的作用范圍是整個(gè)Application應(yīng)用。

image.png
一級(jí)緩存的工作機(jī)制:

一級(jí)緩存是Session會(huì)話級(jí)別的,一般而言,一個(gè)SqlSession對(duì)象會(huì)使用一個(gè)Executor對(duì)象來完成會(huì)話操作,Executor對(duì)象會(huì)維護(hù)一個(gè)Cache緩存,以提高查詢性能

二級(jí)緩存的工作機(jī)制

一個(gè)SqlSession對(duì)象會(huì)使用一個(gè)Executor對(duì)象來完成會(huì)話操作,MyBatis的二級(jí)緩存機(jī)制的關(guān)鍵就是對(duì)這個(gè)Executor對(duì)象做文章。如果用戶配置了"cacheEnabled=true",那么MyBatis在為SqlSession對(duì)象創(chuàng)建Executor對(duì)象時(shí),會(huì)對(duì)Executor對(duì)象加上一個(gè)裝飾者:CachingExecutor,這時(shí)SqlSession使用CachingExecutor對(duì)象來完成操作請求。CachingExecutor對(duì)于查詢請求,會(huì)先判斷該查詢請求在Application級(jí)別的二級(jí)緩存中是否有緩存結(jié)果,如果有查詢結(jié)果,則直接返回緩存結(jié)果;如果緩存中沒有,再交給真正的Executor對(duì)象來完成查詢操作,之后CachingExecutor會(huì)將真正Executor返回的查詢結(jié)果放置到緩存中,然后在返回給用戶。

MyBatis的二級(jí)緩存設(shè)計(jì)得比較靈活,你可以使用MyBatis自己定義的二級(jí)緩存實(shí)現(xiàn);你也可以通過實(shí)現(xiàn)org.apache.ibatis.cache.Cache接口自定義緩存;也可以使用第三方內(nèi)存緩存庫,如Memcached等

image.png
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容