日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

Mybatis的一級(jí)緩存和二級(jí)緩存及其區(qū)別

作者:小趙在練琴 更新時(shí)間: 2022-09-26 編程語(yǔ)言

今天來(lái)講一下Mybatis的一級(jí)緩存, 二級(jí)緩存及其區(qū)別

目錄

一. 緩存是什么

二. 一級(jí)緩存

? ? ? ? 一級(jí)緩存是什么

? ? ? ? 一級(jí)緩存何時(shí)清空?

? ? ? ? 一級(jí)緩存的流程圖

三. 二級(jí)緩存

? ? ? ? 二級(jí)緩存是什么

????????二級(jí)緩存何時(shí)存入

????????二級(jí)緩存有過(guò)期時(shí)間,但沒(méi)有后臺(tái)線程進(jìn)行檢測(cè)?

? ? ? ? 二級(jí)緩存的流程圖

注意事項(xiàng)


一. 緩存是什么

????????緩存其實(shí)就是存儲(chǔ)在內(nèi)存中的臨時(shí)數(shù)據(jù),這里的數(shù)據(jù)量會(huì)比較小,一般來(lái)說(shuō),服務(wù)器的內(nèi)存也是有限的,不可能將所有的數(shù)據(jù)都放到服務(wù)器的內(nèi)存里面,所以, 只會(huì)把關(guān)鍵數(shù)據(jù)放到緩存中,? 這樣的話訪問(wèn)起來(lái)非??? 而且方便(doge),當(dāng) Mybatis 調(diào)用 Dao 層查詢數(shù)據(jù)庫(kù)時(shí),先查詢二級(jí)緩存,二級(jí)緩存中無(wú)對(duì)應(yīng)數(shù)據(jù),再去查詢一級(jí)緩存,一級(jí)緩存中也沒(méi)有,最后去數(shù)據(jù)庫(kù)查找。

二. 一級(jí)緩存

? ? ? ? 一級(jí)緩存是什么

?????????一級(jí)緩存作用域是sqlsession級(jí)別的,同一個(gè)sqlsession中執(zhí)行相同的sql查詢(相同的sql和參數(shù)),第一次會(huì)去查詢數(shù)據(jù)庫(kù)并寫到緩存中,第二次從一級(jí)緩存中取。

? ? ? ? 一級(jí)緩存何時(shí)清空?

????????如果中間sqlSession去執(zhí)行commit操作(執(zhí)行插入、更新、刪除),則會(huì)清空SqlSession中的一級(jí)緩存,這樣做的目的為了讓緩存中存儲(chǔ)的是最新的信息,避免臟讀。一級(jí)緩存時(shí)執(zhí)行commit,close,增刪改等操作,就會(huì)清空當(dāng)前的一級(jí)緩存;當(dāng)對(duì)SqlSession執(zhí)行更新操作(update、delete、insert)后并執(zhí)行commit時(shí),不僅清空其自身的一級(jí)緩存(執(zhí)行更新操作的效果),也清空二級(jí)緩存(執(zhí)行commit()的效果)。

? ? ? ? 一級(jí)緩存的流程圖

三. 二級(jí)緩存

? ? ? ? 二級(jí)緩存是什么

????????二級(jí)緩存指的是Mybatis中SqlSessionFactory對(duì)象的緩存。由同一個(gè)SqlSessionFactory對(duì)象創(chuàng)建的SqlSession共享其緩存。

????????二級(jí)緩存是 mapper 映射級(jí)別的緩存,多個(gè) SqlSession 去操作同一個(gè) Mapper 映射的 sql 語(yǔ)句,多個(gè)SqlSession 可以共用二級(jí)緩存,二級(jí)緩存是跨 SqlSession 的。

????????二級(jí)緩存何時(shí)存入

????????在關(guān)閉sqlsession后(close),才會(huì)把該sqlsession一級(jí)緩存中的數(shù)據(jù)添加到namespace的二級(jí)緩存中。

????????開(kāi)啟了二級(jí)緩存后,還需要將要緩存的pojo實(shí)現(xiàn)Serializable接口,為了將緩存數(shù)據(jù)取出執(zhí)行反序列化操作,因?yàn)槎?jí)緩存數(shù)據(jù)存儲(chǔ)介質(zhì)多種多樣,不一定只存在內(nèi)存中,有可能存在硬盤中。

????????二級(jí)緩存有過(guò)期時(shí)間,但沒(méi)有后臺(tái)線程進(jìn)行檢測(cè)?

?????? ? ? ?
????????需要注意的是,并不是key-value的過(guò)期時(shí)間,而是這個(gè)cache的過(guò)期時(shí)間,是flushInterval,意味著整個(gè)清空緩存cache,所以不需要后臺(tái)線程去定時(shí)檢測(cè)。

每當(dāng)存取數(shù)據(jù)的時(shí)候,都有檢測(cè)一下cache的生命時(shí)間,默認(rèn)是1小時(shí),如果這個(gè)cache存活了一個(gè)小時(shí),那么將整個(gè)清空一下。

?

? ? ? ? 二級(jí)緩存的流程圖

?

注意事項(xiàng)

  1. 映射語(yǔ)句文件中的所有 select 語(yǔ)句的結(jié)果將會(huì)被緩存。
  2. 映射語(yǔ)句文件中的所有 insert、update 和 delete 語(yǔ)句會(huì)刷新緩存。
  3. 緩存會(huì)使用最近最少使用算法(LRU, Least Recently Used)算法來(lái)清除不需要的緩存。
  4. 緩存不會(huì)定時(shí)進(jìn)行刷新(也就是說(shuō),沒(méi)有刷新間隔)。
  5. 緩存會(huì)保存列表或?qū)ο螅o(wú)論查詢方法返回哪種)的 1024 個(gè)引用。
  6. 緩存會(huì)被視為讀/寫緩存,這意味著獲取到的對(duì)象并不是共享的,可以安全地被調(diào)用者修改,而不干擾其他調(diào)用者或線程所做的潛在修改。
    ?

原文鏈接:https://blog.csdn.net/annotation_PLZ/article/details/126923850

欄目分類
最近更新