Mybatis緩存

mybatis分為一級緩存和二級緩存,在默認(rèn)的情況下暂刘,Mybatis只會開啟一級緩存

一級緩存

一級緩存是一次會話(SqlSession)的緩存,相當(dāng)于本地緩存

對于同一個(gè)SqlSession對象逼裆,在參數(shù)和SQL完成一樣的情況下蓝仲,如果緩存沒有過期,只執(zhí)行一次SQL語句

一級緩存的生命周期:

  • 開啟一個(gè)新的會話時(shí)會創(chuàng)建一個(gè)新的SqlSession對象泡态,里面會存在一個(gè)新的Excutor對象搂漠,Excutor對象持有一個(gè)新的PerpetualCache對象,會話結(jié)束時(shí)某弦,Excutor對象和PerpetualCache對象一起釋放掉

  • SqlSession調(diào)用close方法后會清掉PerpetualCache桐汤,一級緩存就不可用了

  • 調(diào)用clearCache而克,會清空PerpetualCache對象,但是可用

  • 該SqlSession中執(zhí)行insert怔毛,delete员萍,update語句后會清除掉PerpetualCache中的數(shù)據(jù)

完全相同的查詢:

  • 傳入的statementId(接口的形式就是方法名)

  • 查詢時(shí)的結(jié)果集中的結(jié)果范圍

  • 這次查詢所產(chǎn)生的最終要傳遞給JDBC java.sql.Preparedstatement的Sql語句字符串(boundSql.getSql()沒有參數(shù))

  • 傳遞給java.sql.Statement要設(shè)置的參數(shù)值

二級緩存

Mybatis的二級緩存是全局緩存,他可以提高對數(shù)據(jù)庫的查詢效率拣度,提高應(yīng)用的性能

默認(rèn)是不開啟的碎绎,如果要開啟,Mybatis要求返回的POJO是可序列化的抗果,如果配置了二級緩存筋帖,就意味著:

  • 映射語句文件中的所有select語句將會被緩存。
  • 映射語句文件中的所欲insert冤馏、update和delete語句會刷新緩存幕随。
  • 緩存會使用默認(rèn)的Least Recently Used(LRU,最近最少使用的)算法來收回宿接。
  • 根據(jù)時(shí)間表赘淮,比如No Flush Interval,(CNFI沒有刷新間隔),緩存不會以任何時(shí)間順序來刷新睦霎。
  • 緩存會存儲列表集合或?qū)ο?無論查詢方法返回什么)的1024個(gè)引用
  • 緩存會被視為是read/write(可讀/可寫)的緩存梢卸,意味著對象檢索不是共享的,而且可以安全的被調(diào)用者修改副女,不干擾其他調(diào)用者或線程所做的潛在修改蛤高。

二級緩存開啟的方式:

  1. 在xml映射文件中聲明

    <!--開啟本mapper的namespace下的二級緩存-->
        <!--
            eviction:代表的是緩存回收策略,目前MyBatis提供以下策略碑幅。
            (1) LRU,最近最少使用的戴陡,一處最長時(shí)間不用的對象
            (2) FIFO,先進(jìn)先出,按對象進(jìn)入緩存的順序來移除他們
            (3) SOFT,軟引用沟涨,移除基于垃圾回收器狀態(tài)和軟引用規(guī)則的對象
            (4) WEAK,弱引用恤批,更積極的移除基于垃圾收集器狀態(tài)和弱引用規(guī)則的對象。這里采用的是LRU裹赴,
                    移除最長時(shí)間不用的對形象
    
            flushInterval:刷新間隔時(shí)間喜庞,單位為毫秒,這里配置的是100秒刷新棋返,如果你不配置它延都,那么當(dāng)
            SQL被執(zhí)行的時(shí)候才會去刷新緩存。
    
            size:引用數(shù)目睛竣,一個(gè)正整數(shù)晰房,代表緩存最多可以存儲多少個(gè)對象,不宜設(shè)置過大。設(shè)置過大會導(dǎo)致內(nèi)存溢出殊者。
            這里配置的是1024個(gè)對象
    
            readOnly:只讀与境,意味著緩存數(shù)據(jù)只能讀取而不能修改,這樣設(shè)置的好處是我們可以快速讀取緩存幽污,缺點(diǎn)是我們沒有辦法修改緩存,他的默認(rèn)值是false簿姨,不允許我們修改
         type:指定自定義緩存的全限定名(需要實(shí)現(xiàn)Cache接口)
         blocking:若緩存中找不到對應(yīng)的key距误,是否會一直blocking,直到有對應(yīng)的數(shù)據(jù)進(jìn)入緩存
        -->
        <cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024"/>
    <!--可以通過設(shè)置useCache來規(guī)定這個(gè)sql是否開啟緩存扁位,ture是開啟准潭,false是關(guān)閉-->
        <select id="selectAllStudents" resultMap="studentMap" useCache="true">
            SELECT id, name, age FROM student
        </select>
        <!--刷新二級緩存
        <select id="selectAllStudents" resultMap="studentMap" flushCache="true">
            SELECT id, name, age FROM student
        </select>
        -->
    
   
在配置文件中開啟
   
   ```xml
   <?xml version="1.0" encoding="UTF-8" ?>
   <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
           "http://mybatis.org/dtd/mybatis-3-config.dtd">
   <configuration>
       <settings>
           <!--這個(gè)配置使全局的映射器(二級緩存)啟用或禁用緩存-->
           <setting name="cacheEnabled" value="true" />
           .....
       </settings>
       ....
   </configuration>

當(dāng)二級緩存開啟后,同一個(gè)命名空間(namespace) 所有的操作語句域仇,都影響著一個(gè)共同的 cache刑然,也就是二級緩存被多個(gè) SqlSession 共享,是一個(gè)全局的變量暇务。當(dāng)開啟緩存后泼掠,數(shù)據(jù)的查詢執(zhí)行的流程就是 二級緩存 -> 一級緩存 -> 數(shù)據(jù)庫。


參考:

https://www.cnblogs.com/happyflyingpig/p/7739749.html

https://blog.csdn.net/weixin_37139197/article/details/82908377

https://www.cnblogs.com/cxuanBlog/p/11333021.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末垦细,一起剝皮案震驚了整個(gè)濱河市择镇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌括改,老刑警劉巖腻豌,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嘱能,居然都是意外死亡吝梅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門惹骂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苏携,“玉大人,你說我怎么就攤上這事对粪《颠叮” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵衩侥,是天一觀的道長国旷。 經(jīng)常有香客問我,道長茫死,這世上最難降的妖魔是什么跪但? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上屡久,老公的妹妹穿的比我還像新娘忆首。我一直安慰自己,他們只是感情好被环,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布糙及。 她就那樣靜靜地躺著,像睡著了一般筛欢。 火紅的嫁衣襯著肌膚如雪浸锨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天版姑,我揣著相機(jī)與錄音柱搜,去河邊找鬼。 笑死剥险,一個(gè)胖子當(dāng)著我的面吹牛聪蘸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播表制,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼健爬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了么介?” 一聲冷哼從身側(cè)響起浑劳,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夭拌,沒想到半個(gè)月后魔熏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸽扁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年蒜绽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桶现。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡躲雅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出骡和,到底是詐尸還是另有隱情相赁,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布慰于,位于F島的核電站钮科,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏婆赠。R本人自食惡果不足惜绵脯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛆挫,春花似錦赃承、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至可免,卻和暖如春抓于,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巴元。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工毡咏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驮宴,地道東北人逮刨。 一個(gè)月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像堵泽,于是被迫代替她去往敵國和親修己。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 本文已授權(quán)Gitchat獨(dú)家發(fā)布匆瓜,未經(jīng)Gitchat許可杏死,不得轉(zhuǎn)載。 我光督,后端Java工程師,現(xiàn)在美團(tuán)點(diǎn)評工作塔粒。愛...
    凱倫說閱讀 42,723評論 25 146
  • 一級緩存 Mybatis對緩存提供支持结借,但是在沒有配置的默認(rèn)情況下,它只開啟一級緩存卒茬,一級緩存只是相對于同一個(gè)Sq...
    學(xué)編程的小屁孩閱讀 341評論 0 0
  • 原文:https://tech.meituan.com/mybatis_cache.html 前言 MyBatis...
    laosijikaichele閱讀 2,496評論 1 27
  • 查詢緩存 mybaits提供了一級緩存和二級緩存船老,用于減輕數(shù)據(jù)壓力,提高數(shù)據(jù)庫性能圃酵。柳畔。 1.1 什么是一級緩存 我...
    n油炸小朋友閱讀 365評論 0 0
  • 久違的晴天,家長會郭赐。 家長大會開好到教室時(shí)荸镊,離放學(xué)已經(jīng)沒多少時(shí)間了。班主任說已經(jīng)安排了三個(gè)家長分享經(jīng)驗(yàn)。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,523評論 16 22