在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    mybatis的一級(jí)緩存和二級(jí)緩存

    一、什么是緩存

    緩存是存在于內(nèi)存中的臨時(shí)數(shù)據(jù)。

    使用緩存減少和數(shù)據(jù)庫(kù)的交互次數(shù),提高執(zhí)行效率。

    1、適用于緩存

    經(jīng)常查詢并且不經(jīng)常改變的;

    數(shù)據(jù)的正確與否對(duì)最終結(jié)果影響不大的;

    2、不適用于緩存

    經(jīng)常改變的數(shù)據(jù);

    數(shù)據(jù)的正確與否對(duì)最終結(jié)果影響很大的;

    例如:商品的庫(kù)存,銀行的匯率,股市的牌價(jià);

    二、mybatis一級(jí)緩存

    1、一級(jí)緩存簡(jiǎn)介

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

    一級(jí)緩存是基于 PerpetualCache 的 HashMap 本地緩存,默認(rèn)打開(kāi)一級(jí)緩存。

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

    如果中間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()的效果)。

    3、一級(jí)緩存無(wú)過(guò)期時(shí)間,只有生命周期

    MyBatis在開(kāi)啟一個(gè)數(shù)據(jù)庫(kù)會(huì)話時(shí),會(huì)創(chuàng)建一個(gè)新的SqlSession對(duì)象,SqlSession對(duì)象中會(huì)有一個(gè)Executor對(duì)象,Executor對(duì)象中持有一個(gè)PerpetualCache對(duì)象,見(jiàn)下面代碼。當(dāng)會(huì)話結(jié)束時(shí),SqlSession對(duì)象及其內(nèi)部的Executor對(duì)象還有PerpetualCache對(duì)象也一并釋放掉。

    三、mybatis二級(jí)緩存

    1、二級(jí)緩存簡(jiǎn)介

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

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

    2、二級(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)存中,有可能存在硬盤(pán)中。

    3、二級(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è)清空一下。

    4、當(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ù)查找。

    ————————————————

    版權(quán)聲明:本文為CSDN博主「哪 吒」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

    原文鏈接:https://blog.csdn.net/guorui_java/article/details/118095020

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年6月24日 09:13
    下一篇 2022年6月24日 09:14

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息