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

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

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

下面對(duì)其他的緩存類(lèi)做一個(gè)介紹
PerpetualCache : 基礎(chǔ)緩存類(lèi)
LruCache : LRU 策略的緩存 當(dāng)緩存到達(dá)上限時(shí)候,刪除最近最少使用的緩存 (Least Recently Use),eviction=“LRU”(默 認(rèn))
FifoCache : FIFO 策略的緩存 當(dāng)緩存到達(dá)上限時(shí)候,刪除最先入隊(duì)的緩存,配置eviction=“FIFO”
SoftCache WeakCache :帶清理策略的緩存 通過(guò) JVM 的軟引用和弱引用來(lái)實(shí)現(xiàn)緩存,當(dāng) JVM 內(nèi)存不足時(shí),會(huì)自動(dòng)清理掉這些緩存,基于 SoftReference 和 WeakReference
SynchronizedCache : 同步緩存 基于 synchronized 關(guān)鍵字實(shí)現(xiàn),解決并發(fā)問(wèn)題
ScheduledCache : 定時(shí)調(diào)度的緩存,在進(jìn)行 get/put/remove/getSize 等操作前,判斷 緩存時(shí)間是否超過(guò)了設(shè)置的最長(zhǎng)緩存時(shí)間(默認(rèn)是 一小時(shí)),如果是則清空緩存–即每隔一段時(shí)間清 空一次緩存
SerializedCache :支持序列化的緩存 將對(duì)象序列化以后存到緩存中,取出時(shí)反序列化
TransactionalCache :事務(wù)緩存,在二級(jí)緩存中使用,可一次存入多個(gè)緩存,移除多個(gè)緩存 。通過(guò)TransactionalCacheManager 中用 Map 維護(hù)對(duì)應(yīng)關(guān)系。
我們從以下三個(gè)方面,對(duì)比純靜態(tài)和偽靜態(tài)兩種靜態(tài)頁(yè)面生成方式,逐一展開(kāi)分析。
用JS的正則表達(dá)式如何判斷輸入框內(nèi)為中文或者是英文數(shù)字,或者是三者混編
css制作扇形
純CSS3文字Loading動(dòng)畫(huà)特效
PhpStorm 2022.1 EAP 3 在 PHPDoc 和屬性中添加了對(duì)多行和嵌套數(shù)組形狀的完全支持:在這種情況下,可以使用數(shù)組形狀注釋定義數(shù)組結(jié)構(gòu),以獲得鍵的代碼補(bǔ)全并推斷值的類(lèi)型。
PHP作為Web界第一大語(yǔ)言近年來(lái)熱度不夠,但是這幾年的進(jìn)步和成長(zhǎng)卻沒(méi)有中斷。在2022伊始,我們來(lái)一起學(xué)習(xí)一下目前PHP的現(xiàn)狀以及最新版本帶來(lái)的特性。
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 不能正確使用多行模式。