《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
本文主要講解MyBatis非常棒的緩存機(jī)制的設(shè)計(jì)原理,給讀者們介紹一下MyBatis的緩存機(jī)制的輪廓,然后會(huì)分別針對(duì)緩存機(jī)制中的方方面面展開(kāi)討論。
MyBatis將數(shù)據(jù)緩存設(shè)計(jì)成兩級(jí)結(jié)構(gòu),分為一級(jí)緩存、二級(jí)緩存:
???????一級(jí)緩存是Session會(huì)話級(jí)別的緩存,位于表示一次數(shù)據(jù)庫(kù)會(huì)話的SqlSession對(duì)象之中,又被稱之為本地緩存。一級(jí)緩存是MyBatis內(nèi)部實(shí)現(xiàn)的一個(gè)特性,用戶不能配置,默認(rèn)情況下自動(dòng)支持的緩存,用戶沒(méi)有定制它的權(quán)利(不過(guò)這也不是絕對(duì)的,可以通過(guò)開(kāi)發(fā)插件對(duì)它進(jìn)行修改);
???????二級(jí)緩存是Application應(yīng)用級(jí)別的緩存,它的是生命周期很長(zhǎng),跟Application的聲明周期一樣,也就是說(shuō)它的作用范圍是整個(gè)Application應(yīng)用。
???
??MyBatis中一級(jí)緩存和二級(jí)緩存的組織如下圖所示:
?一級(jí)緩存的工作機(jī)制:
??????一級(jí)緩存是Session會(huì)話級(jí)別的,一般而言,一個(gè)SqlSession對(duì)象會(huì)使用一個(gè)Executor對(duì)象來(lái)完成會(huì)話操作,Executor對(duì)象會(huì)維護(hù)一個(gè)Cache緩存,以提高查詢性能。關(guān)于一級(jí)緩存的詳細(xì)實(shí)現(xiàn),我已經(jīng)在《深入理解mybatis原理》 MyBatis的一級(jí)緩存實(shí)現(xiàn)詳解 及使用注意事項(xiàng) 一文中有非常詳盡的討論,讀者可以前去了解。
二級(jí)緩存的工作機(jī)制:
???????如上所言,一個(gè)SqlSession對(duì)象會(huì)使用一個(gè)Executor對(duì)象來(lái)完成會(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ì)象來(lái)完成操作請(qǐng)求。CachingExecutor對(duì)于查詢請(qǐng)求,會(huì)先判斷該查詢請(qǐng)求在Application級(jí)別的二級(jí)緩存中是否有緩存結(jié)果,如果有查詢結(jié)果,則直接返回緩存結(jié)果;如果緩存中沒(méi)有,再交給真正的Executor對(duì)象來(lái)完成查詢操作,之后CachingExecutor會(huì)將真正Executor返回的查詢結(jié)果放置到緩存中,然后在返回給用戶。
?????MyBatis的二級(jí)緩存設(shè)計(jì)得比較靈活,你可以使用MyBatis自己定義的二級(jí)緩存實(shí)現(xiàn);你也可以通過(guò)實(shí)現(xiàn)org.apache.ibatis.cache.Cache接口自定義緩存;也可以使用第三方內(nèi)存緩存庫(kù),如Memcached等,這個(gè)我們會(huì)在后續(xù)的文章中詳細(xì)討論。
????????????????????
??????????????
由于緩存機(jī)制東西太多,所以將緩存機(jī)制的敘述拆成一下幾部分(讀者可點(diǎn)擊查看):
1. MyBatis的一級(jí)緩存實(shí)現(xiàn)詳解 及使用注意事項(xiàng)
2. MyBatis的二級(jí)緩存的設(shè)計(jì)原理
3. 自定義二級(jí)緩存(未完,待續(xù))
4. 使用第三方內(nèi)存庫(kù)作為MyBatis的二級(jí)緩存(未完,待續(xù))
---------------------?
作者:亦山?
來(lái)源:CSDN?
原文:https://blog.csdn.net/luanlouis/article/details/41390801?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
總結(jié)
以上是生活随笔為你收集整理的《深入理解mybatis原理》 MyBatis缓存机制的设计与实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mybatis的缓存机制(一级缓存二级缓
- 下一篇: Mybatis二级缓存原理