国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MyBatis的緩存,一級(jí)緩存,二級(jí)緩存

這篇具有很好參考價(jià)值的文章主要介紹了MyBatis的緩存,一級(jí)緩存,二級(jí)緩存。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

10、MyBatis的緩存

10.1、MyBatis的一級(jí)緩存

一級(jí)緩存是SqlSession級(jí)別的,通過(guò)同一個(gè)SqlSession對(duì)象 查詢的結(jié)果數(shù)據(jù)會(huì)被緩存,下次執(zhí)行相同的查詢語(yǔ)句,就 會(huì)從緩存中(緩存在內(nèi)存里)直接獲取,不會(huì)重新訪問(wèn)數(shù)據(jù)庫(kù)(數(shù)據(jù)庫(kù)在磁盤(pán)里),也就是說(shuō)就執(zhí)行一次sql。一級(jí)緩存 默認(rèn)開(kāi)啟。

使一級(jí)緩存失效的四種情況:

  1. 不同的SqlSession對(duì)應(yīng)不同的一級(jí)緩存

  2. 同一個(gè)SqlSession但是查詢條件不同

  3. 同一個(gè)SqlSession兩次查詢之間執(zhí)行了任意的增刪改操作 。

    因?yàn)槿我庖淮卧鰟h改操作會(huì)清空所有SqlSession的所有緩存---為什么?因?yàn)槿我庖淮卧鰟h改可能會(huì)導(dǎo)致緩存的數(shù)據(jù)與增刪改后的數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致,我們肯定要以數(shù)據(jù)庫(kù)中的為準(zhǔn),這是mybatis的機(jī)制,自動(dòng)完成清空緩存。

  4. 同一個(gè)SqlSession兩次查詢期間手動(dòng)清空了緩存

    sqlSession.clearCache();//手動(dòng)清空一級(jí)緩存。一級(jí)緩存是sqlSession級(jí)別的

例子:

MyBatis的緩存,一級(jí)緩存,二級(jí)緩存,mybatis,mybatis,java,spring

10.2、MyBatis的二級(jí)緩存

二級(jí)緩存是SqlSessionFactory級(jí)別,通過(guò)同一個(gè)SqlSessionFactory創(chuàng)建的SqlSession對(duì)象 查詢的結(jié)果會(huì)被 緩存;此后若再次執(zhí)行相同的查詢語(yǔ)句,結(jié)果就會(huì)從緩存中獲取 。二級(jí)緩存不是默認(rèn)開(kāi)啟的,開(kāi)啟需滿足條件。

二級(jí)緩存開(kāi)啟的條件:

a>在核心配置文件中,設(shè)置全局配置屬性cacheEnabled=“true”,默認(rèn)為true,不需要設(shè)置

b>在映射文件中設(shè)置標(biāo)簽 <cache>

c>二級(jí)緩存必須在SqlSession關(guān)閉或提交之后有效

d>查詢的數(shù)據(jù)所轉(zhuǎn)換的實(shí)體類(lèi)類(lèi)型必須實(shí)現(xiàn)序列化的接口

使二級(jí)緩存失效的情況:

兩次查詢之間執(zhí)行了任意的增刪改操作,會(huì)使一級(jí)和二級(jí)緩存同時(shí)失效

咱自己創(chuàng)建的sqlSessionUtil工具類(lèi),每調(diào)一次,都新建一個(gè)SqlSessionFactory,然后再新建一個(gè)sqlSession。要想測(cè)試二級(jí)緩沖,可以自己直接寫(xiě),不使用工具類(lèi)。

    @Test
    public void testCache2() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //創(chuàng)建SqlSessionFactoryBuilder對(duì)象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //通過(guò)核心配置文件所對(duì)應(yīng)的字節(jié)輸入流創(chuàng)建工廠類(lèi)SqlSessionFactory,生產(chǎn)SqlSession對(duì)象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        SqlSession sqlSession1 = sqlSessionFactory.openSession(true);

        CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
        Emp emp1 = mapper1.getEmpByEmpId(1);
        sqlSession1.close();
        System.out.println(emp1);
        
        SqlSession sqlSession2 = sqlSessionFactory.openSession(true);
        CacheMapper mapper2 = sqlSession2.getMapper(CacheMapper.class);
        Emp emp2 = mapper2.getEmpByEmpId(1);
        System.out.println(emp2);
        sqlSession2.close();
    }
Emp要實(shí)現(xiàn)序列化
映射文件里要加一個(gè)<cache>標(biāo)簽

10.3、二級(jí)緩存的相關(guān)配置

了解

在mapper配置文件中添加的cache標(biāo)簽可以設(shè)置一些屬性:

①eviction屬性:緩存回收策略,默認(rèn)的是 LRU。

LRU(Least Recently Used) – 最近最少使用的:移除最長(zhǎng)時(shí)間不被使用的對(duì)象。

FIFO(First in First out) – 先進(jìn)先出:按對(duì)象進(jìn)入緩存的順序來(lái)移除它們。

SOFT – 軟引用:移除基于垃圾回收器狀態(tài)和軟引用規(guī)則的對(duì)象。

WEAK – 弱引用:更積極地移除基于垃圾收集器狀態(tài)和弱引用規(guī)則的對(duì)象。

②flushInterval屬性:刷新間隔,單位毫秒 默認(rèn)情況是不設(shè)置,也就是沒(méi)有刷新間隔,緩存僅僅調(diào)用語(yǔ)句時(shí)刷新

③size屬性:引用數(shù)目,正整數(shù) 代表緩存最多可以存儲(chǔ)多少個(gè)對(duì)象,太大容易導(dǎo)致內(nèi)存溢出

④readOnly屬性:只讀, true/false

true:只讀緩存;會(huì)給所有調(diào)用者返回緩存對(duì)象的相同實(shí)例。因此這些對(duì)象不能被修改。這提供了 很重 要的性能優(yōu)勢(shì)。

false:讀寫(xiě)緩存;會(huì)返回緩存對(duì)象的拷貝(通過(guò)序列化)。這會(huì)慢一些,但是安全,因此默認(rèn)是 false。

10.4、MyBatis緩存查詢的順序

二級(jí)緩存的范圍大于一級(jí)緩存的范圍,也就是說(shuō),二級(jí)緩存中的數(shù)據(jù)要多于一級(jí)緩存中的。因?yàn)橐粋€(gè)SqlSessionFactory可以對(duì)應(yīng)多個(gè)SqlSession,而一個(gè)一級(jí)緩存只對(duì)應(yīng)一個(gè)SqlSession。但是,SqlSession關(guān)閉之后,一級(jí)緩存中的數(shù)據(jù)才會(huì)寫(xiě)入二級(jí)緩存,所以,當(dāng)SqlSession還沒(méi)有關(guān)閉時(shí),二級(jí)緩存中沒(méi)有一級(jí)緩存中的一些數(shù)據(jù),此時(shí)二級(jí)緩存可能沒(méi)被命中,則查一級(jí),若一級(jí)沒(méi)命中(之前沒(méi)有寫(xiě)入過(guò)一級(jí)緩存),則查數(shù)據(jù)庫(kù)

查詢順序:2 ---> 1 ----> 數(shù)據(jù)庫(kù)

先查詢二級(jí)緩存,因?yàn)槎?jí)緩存中可能會(huì)有其他程序已經(jīng)查出來(lái)的數(shù)據(jù),可以拿來(lái)直接使用。

如果二級(jí)緩存沒(méi)有命中,再查詢一級(jí)緩存

如果一級(jí)緩存也沒(méi)有命中,則查詢數(shù)據(jù)庫(kù)

SqlSession關(guān)閉之后,一級(jí)緩存中的數(shù)據(jù)才會(huì)寫(xiě)入二級(jí)緩存文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-724976.html

到了這里,關(guān)于MyBatis的緩存,一級(jí)緩存,二級(jí)緩存的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Mybatis一級(jí)緩存和二級(jí)緩存(帶測(cè)試方法)

    目錄 相關(guān)導(dǎo)讀 一、什么是緩存? 二、Mabtis一級(jí)緩存 (1)測(cè)試一級(jí)緩存

    2023年04月08日
    瀏覽(22)
  • Mybatis的一級(jí)、二級(jí)緩存怎樣使用?

    一級(jí)緩存基于PerpetualCache的HashMap本地緩存,其存儲(chǔ)作用域?yàn)镾ession,當(dāng)Session進(jìn)行flush或close之后,該Session中的所有Cache就將清空,默認(rèn)打開(kāi)一級(jí)緩存。 二級(jí)緩存是基于namespace和mappe的作用域起作用的,不是依賴于SQL session,默認(rèn)也是采用PerpetualCache,HashMap存儲(chǔ) 當(dāng)某一個(gè)作用域

    2024年02月16日
    瀏覽(16)
  • mybatis分頁(yè)、延遲加載、立即加載、一級(jí)緩存、二級(jí)緩存

    mybatis分頁(yè)、延遲加載、立即加載、一級(jí)緩存、二級(jí)緩存

    分類(lèi) : 使用Limit,來(lái)進(jìn)行分頁(yè);物理分頁(yè) 使用RowBounds集合來(lái)保存分頁(yè)需要數(shù)據(jù),來(lái)進(jìn)行分頁(yè);邏輯分頁(yè);本質(zhì)是全查,只是顯示部分 使用分頁(yè)插件來(lái)進(jìn)行分頁(yè);物理分頁(yè) 方式一: 方式二: 方式三: 首先導(dǎo)入兩個(gè)jar包: 配置插件: 調(diào)用: 字段 含義 pageNum 當(dāng)前頁(yè)的頁(yè)碼 pa

    2024年01月18日
    瀏覽(41)
  • mybatis的一級(jí)二級(jí)緩存詳解及源碼解剖

    mybatis的一級(jí)二級(jí)緩存詳解及源碼解剖

    一級(jí)緩存是指在同一個(gè)SqlSession中,對(duì)于相同的查詢語(yǔ)句和參數(shù),第一次查詢的結(jié)果會(huì)被緩存到內(nèi)存中,后續(xù)的查詢會(huì)直接從緩存中獲取結(jié)果,而不會(huì)再次查詢數(shù)據(jù)庫(kù)。一級(jí)緩存是MyBatis默認(rèn)開(kāi)啟的,可以通過(guò)在SqlSession中調(diào)用clearCache()方法來(lái)清空緩存。 二級(jí)緩存是指在多個(gè)Sq

    2024年02月05日
    瀏覽(24)
  • Mr. Cappuccino的第55杯咖啡——Mybatis一級(jí)緩存&二級(jí)緩存

    Mr. Cappuccino的第55杯咖啡——Mybatis一級(jí)緩存&二級(jí)緩存

    緩存越小,查詢速度越快,緩存數(shù)據(jù)越少 緩存越大,查詢速度越慢,緩存數(shù)據(jù)越多 在多級(jí)緩存中,一般常見(jiàn)的是先查詢一級(jí)緩存,再查詢二級(jí)緩存,但在Mybatis中是先查詢二級(jí)緩存,再查詢一級(jí)緩存。 在Mybatis中,BaseExecutor屬于一級(jí)緩存執(zhí)行器,CachingExecutor屬于二級(jí)緩存執(zhí)行

    2024年02月14日
    瀏覽(23)
  • MyBatis-Plus一級(jí)緩存和二級(jí)緩存-redis解決緩存的臟數(shù)據(jù)

    MyBatis-Plus一級(jí)緩存和二級(jí)緩存-redis解決緩存的臟數(shù)據(jù)

    什么是緩存? 1.存在內(nèi)存中的臨時(shí)數(shù)據(jù) 2.將用戶經(jīng)常查詢的數(shù)據(jù)放在緩存(內(nèi)存)中,用戶去查詢數(shù)據(jù)就不用從磁盤(pán)上(關(guān)系型數(shù)據(jù)庫(kù) 數(shù)據(jù)文件)查詢,從緩存中查詢,從而提高查詢效率,解決了高并發(fā)系統(tǒng)的性能問(wèn)題。 為什么使用緩存 減少和數(shù)據(jù)庫(kù)的交互次數(shù),減少系統(tǒng)開(kāi)

    2024年02月09日
    瀏覽(14)
  • Java Web現(xiàn)代化開(kāi)發(fā):Spring Boot + Mybatis + Redis二級(jí)緩存

    Java Web現(xiàn)代化開(kāi)發(fā):Spring Boot + Mybatis + Redis二級(jí)緩存

    Spring-Boot因其提供了各種開(kāi)箱即用的插件,使得它成為了當(dāng)今最為主流的Java Web開(kāi)發(fā)框架之一。Mybatis是一個(gè)十分輕量好用的ORM框架。Redis是當(dāng)今十分主流的分布式key-value型數(shù)據(jù)庫(kù),在web開(kāi)發(fā)中,我們常用它來(lái)緩存數(shù)據(jù)庫(kù)的查詢結(jié)果。 本篇博客將介紹如何使用Spring-Boot快速搭建一

    2024年01月17日
    瀏覽(19)
  • MyBatis緩存-提高檢索效率的利器--一級(jí)緩存

    MyBatis緩存-提高檢索效率的利器--一級(jí)緩存

    ??前言 本篇博文是關(guān)于MyBatis一級(jí)緩存的介紹使用和緩存失效情況分析,希望能夠幫助到您?? ??個(gè)人主頁(yè):晨犀主頁(yè) ??個(gè)人簡(jiǎn)介:大家好,我是晨犀,希望我的文章可以幫助到大家,您的滿意是我的動(dòng)力???? ??歡迎大家:這里是CSDN,我總結(jié)知識(shí)的地方,歡迎來(lái)到我的博

    2024年02月14日
    瀏覽(20)
  • 手敲Mybatis(16章)-一級(jí)緩存功能實(shí)現(xiàn)

    手敲Mybatis(16章)-一級(jí)緩存功能實(shí)現(xiàn)

    這一節(jié)的目的主要是實(shí)現(xiàn)SqlSession級(jí)別的緩存,也就是一級(jí)緩存,首先看下圖一,用戶可以通過(guò)設(shè)置來(lái)進(jìn)行是否開(kāi)啟一級(jí)緩存,不設(shè)置的化默認(rèn)開(kāi)啟一級(jí)緩存,localCacheScope=SESSION為要設(shè)置一級(jí)緩存,localCacheScope=STATEMENT為不要設(shè)置一級(jí)緩存,(所以后面在清理緩存時(shí)會(huì)進(jìn)行判斷,

    2024年02月01日
    瀏覽(16)
  • Mybatis的二級(jí)緩存

    Mybatis的二級(jí)緩存

    緩存的概述和分類(lèi) ? 概述 ? 緩存就是一塊內(nèi)存空間.保存臨時(shí)數(shù)據(jù) ? 將數(shù)據(jù)源(數(shù)據(jù)庫(kù)或者文件)中的數(shù)據(jù)讀取出來(lái)存放到緩存中,再次獲取的時(shí)候 ,直接從緩存中獲取,可以減少和數(shù)據(jù)庫(kù)交互的次數(shù),這樣可以提升程序的性能! ? 適用于緩存的:經(jīng)常查詢但不經(jīng)常修改的(eg: 省市

    2023年04月12日
    瀏覽(80)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包