Mybatis詳細(xì)對(duì)比一級(jí)緩存與二級(jí)緩存
基本要點(diǎn)
1、緩存
什么是緩存?
存在內(nèi)存中的臨時(shí)數(shù)據(jù),我們可以把用戶經(jīng)常查詢的數(shù)據(jù)存放到緩存中,當(dāng)用戶重復(fù)查詢時(shí),我們可以直接從緩存中查詢,提高查詢效率,可以解決高并發(fā)系統(tǒng)的性能問(wèn)題
為什么使用緩存?
減少和數(shù)據(jù)庫(kù)交互次數(shù),減輕數(shù)據(jù)庫(kù)的壓力,提高系統(tǒng)效率
什么樣的數(shù)據(jù)能使用緩存?
經(jīng)常查詢且不經(jīng)常改變的數(shù)據(jù)
2、一級(jí)緩存(默認(rèn)開(kāi)啟,無(wú)法關(guān)閉)
1)一級(jí)緩存的有效區(qū)間是sqlSession從創(chuàng)建到關(guān)閉的過(guò)程
假設(shè)我們重復(fù)執(zhí)行同一條查詢語(yǔ)句,如下圖所示
我們可以看出,程序只會(huì)連接數(shù)據(jù)庫(kù)查詢一次,后面的查詢結(jié)果都從緩存中取出
2)一級(jí)緩存失效的幾種情況
- 查詢不同的東西(前后2次的查詢不一樣,會(huì)刷新緩存)
- 執(zhí)行insert、update 和 delete 語(yǔ)句后會(huì)刷新緩存(增刪改操作可能會(huì)改變?cè)瓉?lái)的數(shù)據(jù),所以必定會(huì)刷新緩存)
- 查詢不同的Mapper.xml
- 手動(dòng)清除緩存,兩次查詢中間調(diào)用了sqlSession.clearCache()方法
3、二級(jí)緩存
1)定義
二級(jí)緩存是基于namespace級(jí)別的緩存,可以理解為單個(gè)Mapper級(jí)別的緩存
建議將SQL映射文件涉及到的實(shí)體類序列化,即實(shí)現(xiàn)Serializable接口,防止出現(xiàn)報(bào)錯(cuò)
2)工作機(jī)制
- 所有的查詢數(shù)據(jù)都會(huì)先放在一級(jí)緩存中,當(dāng)會(huì)話commit或者sqlSession關(guān)閉時(shí),系統(tǒng)會(huì)把一級(jí)緩存中的數(shù)據(jù)傳遞到二級(jí)緩存中
- 當(dāng)xml文件再次被調(diào)用且執(zhí)行相同的查詢操作時(shí),直接從Mapper的緩存中查
- 不同的mapper查出的數(shù)據(jù)會(huì)放在自己對(duì)應(yīng)的緩存中
3)開(kāi)啟步驟:
首先去mybatis-config.xml中開(kāi)啟全局緩存
<settings> <setting name="cachaEnable" value="value"/> </setting>
在SQL映射文件文件中啟用全局的二級(jí)緩存
如下,我們創(chuàng)建了一個(gè)清除策略為 FIFO 的緩存,每隔 60 秒刷新
最多可以存儲(chǔ)結(jié)果對(duì)象或列表的 512 個(gè)引用,返回的對(duì)象被認(rèn)為是只讀的
如果不需要參數(shù),直接使用<cache/>
即可
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
4)緩存的幾種清除策略(主要了解以下2種)
- LRU – 最近最少使用:移除最長(zhǎng)時(shí)間不被使用的對(duì)象。
- FIFO – 先進(jìn)先出:按對(duì)象進(jìn)入緩存的順序來(lái)移除它們。
- SOFT – 軟引用:基于垃圾回收器狀態(tài)和軟引用規(guī)則移除對(duì)象。
- WEAK – 弱引用:更積極地基于垃圾收集器狀態(tài)和弱引用規(guī)則移除對(duì)象
4、緩存查詢?cè)?/h3>
我們的查詢請(qǐng)求會(huì)先去二級(jí)緩存中查看有沒(méi)有數(shù)據(jù)
如果沒(méi)有,就會(huì)去一級(jí)緩存中查有沒(méi)有
如果都沒(méi)有,再連接數(shù)據(jù)庫(kù)查詢
到此這篇關(guān)于Mybatis詳細(xì)對(duì)比一級(jí)緩存與二級(jí)緩存的文章就介紹到這了,更多相關(guān)Mybatis緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 一文搞懂MyBatis一級(jí)緩存和二級(jí)緩存
- Java Mybatis一級(jí)緩存和二級(jí)緩存
- MyBatis一級(jí)緩存與二級(jí)緩存原理與作用分析
- mybatis一級(jí)緩存和二級(jí)緩存的區(qū)別及說(shuō)明
- Mybatis?一級(jí)緩存和二級(jí)緩存原理區(qū)別
- Mybatis的一級(jí)緩存和二級(jí)緩存原理分析與使用
- 關(guān)于mybatis的一級(jí)緩存和二級(jí)緩存的那些事兒
- Mybatis 一級(jí)緩存與二級(jí)緩存的實(shí)現(xiàn)
- MyBatis 延遲加載、一級(jí)緩存、二級(jí)緩存(詳解)
- MyBatis中一級(jí)緩存和二級(jí)緩存的區(qū)別
相關(guān)文章
SpringBoot項(xiàng)目打包成jar后獲取classpath下文件失敗的解決
這篇文章主要介紹了SpringBoot項(xiàng)目打包成jar后獲取classpath下文件失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07用Java集合中的Collections.sort方法如何對(duì)list排序(兩種方法)
本文通過(guò)兩種方法給大家介紹java集合中的Collections.sort方法對(duì)list排序,第一種方式是list中的對(duì)象實(shí)現(xiàn)Comparable接口,第二種方法是根據(jù)Collections.sort重載方法實(shí)現(xiàn),對(duì)collections.sort方法感興趣的朋友一起學(xué)習(xí)吧2015-10-10Spring Boot 在啟動(dòng)時(shí)進(jìn)行配置文件加解密的方法詳解
這篇文章主要介紹了Spring Boot 在啟動(dòng)時(shí)進(jìn)行配置文件加解密的方法,本文通過(guò)實(shí)例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Java通過(guò)cellstyle屬性設(shè)置Excel單元格常用樣式的全面總結(jié)講解
在處理Excel文件時(shí),經(jīng)常需要對(duì)單元格進(jìn)行樣式設(shè)置,以滿足特定的需求和美化要求,這篇文章主要給大家介紹了關(guān)于Java通過(guò)cellstyle屬性設(shè)置Excel單元格常用樣式的相關(guān)資料,需要的朋友可以參考下2024-01-01java.net.MalformedURLException異常的解決方法
下面小編就為大家?guī)?lái)一篇java.net.MalformedURLException異常的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05Spring中的AutowireCandidateResolver的具體使用詳解
這篇文章主要介紹了Spring中的AutowireCandidateResolver的具體使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04JAVA 根據(jù)設(shè)置的概率生成隨機(jī)數(shù)的方法
本篇文章主要介紹了JAVA 根據(jù)設(shè)置的概率生成隨機(jī)數(shù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08