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

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

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

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