Mybatis源碼 一級(jí)緩存的的簡(jiǎn)單介紹
一級(jí)緩存
市面上流行的ORM框架都支持緩存,不管是Hibernate還是Mybatis都支持一級(jí)緩存和二級(jí)緩存,目的是把數(shù)據(jù)緩存到JVM內(nèi)存中,減少和數(shù)據(jù)庫的交互來提高查詢速度。同時(shí)MyBatis還可以整合三方緩存技術(shù)。
Mybatis一級(jí)緩默認(rèn)開啟,是SqlSession級(jí)別的,也就是說需要同一個(gè)SqlSession執(zhí)行同樣的SQL和參數(shù)才有可能命中緩存。如:

同一個(gè)SqlSession執(zhí)行同一個(gè)SQL,發(fā)現(xiàn)控制臺(tái)日志只執(zhí)行了一次SQL記錄,說明第二次查詢是走緩存了。但是要注意的是,當(dāng)SqlSession執(zhí)行了delete,update,insert語句后,緩存會(huì)被清除。
那么一級(jí)緩存在哪兒呢?下面給大家介紹一個(gè)類。

Mybatis中提供的緩存都是Cache的實(shí)現(xiàn)類,但是真正實(shí)現(xiàn)緩存的是PerpetualCache,其中維護(hù)了一個(gè)Map<Object, Object> cache = new HashMap<Object, Object>() 結(jié)構(gòu)來緩存數(shù)據(jù)。其他的緩存類采用了裝飾模式對(duì)PerpetualCache做增強(qiáng)。比如:LruCache 在PerpetualCache 的基礎(chǔ)上增加了最近最少使用的緩存清楚策略,當(dāng)緩存到達(dá)上限時(shí)候,刪除最近最少使用的緩存 (Least Recently Use)。代碼如下

下面對(duì)其他的緩存類做一個(gè)介紹
PerpetualCache : 基礎(chǔ)緩存類
LruCache : LRU 策略的緩存 當(dāng)緩存到達(dá)上限時(shí)候,刪除最近最少使用的緩存 (Least Recently Use),eviction=“LRU”(默 認(rèn))
FifoCache : FIFO 策略的緩存 當(dāng)緩存到達(dá)上限時(shí)候,刪除最先入隊(duì)的緩存,配置eviction=“FIFO”
SoftCache WeakCache :帶清理策略的緩存 通過 JVM 的軟引用和弱引用來實(shí)現(xiàn)緩存,當(dāng) JVM 內(nèi)存不足時(shí),會(huì)自動(dòng)清理掉這些緩存,基于 SoftReference 和 WeakReference
SynchronizedCache : 同步緩存 基于 synchronized 關(guān)鍵字實(shí)現(xiàn),解決并發(fā)問題
ScheduledCache : 定時(shí)調(diào)度的緩存,在進(jìn)行 get/put/remove/getSize 等操作前,判斷 緩存時(shí)間是否超過了設(shè)置的最長(zhǎng)緩存時(shí)間(默認(rèn)是 一小時(shí)),如果是則清空緩存–即每隔一段時(shí)間清 空一次緩存
SerializedCache :支持序列化的緩存 將對(duì)象序列化以后存到緩存中,取出時(shí)反序列化
TransactionalCache :事務(wù)緩存,在二級(jí)緩存中使用,可一次存入多個(gè)緩存,移除多個(gè)緩存 。通過TransactionalCacheManager 中用 Map 維護(hù)對(duì)應(yīng)關(guān)系。
本文鏈接:http://jmtianhui.com/news/details-12-783.html
版權(quán)聲明:
1:本站所有內(nèi)容均由互聯(lián)網(wǎng)收集整理、上傳,并且以計(jì)算機(jī)技術(shù)研究交流為目的,僅供大家參考、學(xué)習(xí),不存在任何商業(yè)目的與商業(yè)用途,如描述有誤或者學(xué)術(shù)不對(duì)之處歡迎及時(shí)提出,不甚感謝。
2、 如涉及版權(quán)問題,請(qǐng)聯(lián)系我們4724325@qq.com第一時(shí)間處理;
我們從以下三個(gè)方面,對(duì)比純靜態(tài)和偽靜態(tài)兩種靜態(tài)頁面生成方式,逐一展開分析。
用JS的正則表達(dá)式如何判斷輸入框內(nèi)為中文或者是英文數(shù)字,或者是三者混編
css制作扇形
純CSS3文字Loading動(dòng)畫特效
PhpStorm 2022.1 EAP 3 在 PHPDoc 和屬性中添加了對(duì)多行和嵌套數(shù)組形狀的完全支持:在這種情況下,可以使用數(shù)組形狀注釋定義數(shù)組結(jié)構(gòu),以獲得鍵的代碼補(bǔ)全并推斷值的類型。
PHP作為Web界第一大語言近年來熱度不夠,但是這幾年的進(jìn)步和成長(zhǎng)卻沒有中斷。在2022伊始,我們來一起學(xué)習(xí)一下目前PHP的現(xiàn)狀以及最新版本帶來的特性。
Linux程序前臺(tái)后臺(tái)切換:在Linux終端運(yùn)行命令的時(shí)候,在命令末尾加上 & 符號(hào),就可以讓程序在后臺(tái)運(yùn)行Ubuntu$">root@Ubuntu$ ./tcpserv01 &
Python 的正則表達(dá)式支持 多行模式,將每行文字分別匹配。然而各種操作系統(tǒng)里,換行符的表示法各不相同,會(huì)導(dǎo)致 Python 不能正確使用多行模式。