MyBatis緩存功能原理及實(shí)例解析-創(chuàng)新互聯(lián)

緩存

創(chuàng)新互聯(lián)是網(wǎng)站建設(shè)專家,致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營(yíng)銷,專業(yè)領(lǐng)域包括網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、電商網(wǎng)站制作開發(fā)、小程序定制開發(fā)、微信營(yíng)銷、系統(tǒng)平臺(tái)開發(fā),與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開發(fā)公司不同,我們的整合解決方案結(jié)合了恒基網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷的理念,并將策略和執(zhí)行緊密結(jié)合,且不斷評(píng)估并優(yōu)化我們的方案,為客戶提供全方位的互聯(lián)網(wǎng)品牌整合方案!

1、簡(jiǎn)介

查詢 : 連接數(shù)據(jù)庫,耗資源!

一次查詢的結(jié)果,給他暫存在一個(gè)可以直接取到的地方!--->內(nèi)存 : 緩存

我們?cè)俅尾樵兿嗤瑪?shù)據(jù)的時(shí)候,直接走緩存,就不用走數(shù)據(jù)庫了

什么是緩存:

  • 存在內(nèi)存中的臨時(shí)數(shù)據(jù)
  • 將用戶經(jīng)常查詢的數(shù)據(jù)放在緩存(內(nèi)存)中,用戶去查詢數(shù)據(jù)就不用從磁盤上(關(guān)系型數(shù)據(jù)庫數(shù)據(jù)文件)查詢
  • 從緩存中查詢,從而提高查詢效率,解決了高并發(fā)系統(tǒng)的性能問題

為什么使用緩存:

  • 減少和數(shù)據(jù)庫的交互此數(shù),減少系統(tǒng)開銷,提高系統(tǒng)效率
  • 什么樣的數(shù)據(jù)能使用緩存:
  • 經(jīng)常查詢并且不經(jīng)常改變的數(shù)據(jù)

2、MyBatis緩存

  • MyBatis包含一個(gè)非常強(qiáng)大的查詢緩存特性,它可以非常方便地定制和配置緩存。緩存可以極大的提升查詢效率
  • MyBatis系統(tǒng)中默認(rèn)定義了兩級(jí)緩存:一級(jí)緩存和二級(jí)緩存
    • 默認(rèn)情況下,只有一級(jí)緩存開啟。(SqlSession級(jí)別的緩存,也稱為本地緩存)
    • 二級(jí)緩存需要手動(dòng)開啟和配置,他是基于namespace級(jí)別的緩存
    • 未來提高擴(kuò)展性,MyBatis定義了緩存接口Cache。我們可以通過實(shí)現(xiàn)Cache接口來自定義二級(jí)緩存

3、一級(jí)緩存

  • 一級(jí)緩存也叫本地緩存:SqlSession
  • 與數(shù)據(jù)同義詞會(huì)話期間查詢到的數(shù)據(jù)會(huì)放在本地緩存中
  • 以后如果需要獲取相同的數(shù)據(jù),直接從緩存中拿,沒有必要再去查詢數(shù)據(jù)

測(cè)試步驟

  • 開啟日志
  • 測(cè)試在一個(gè)Session中查詢兩次相同的記錄
  • 查看日志輸出

緩存失效的情況:

  • 查詢不同的東西
  • 增刪改操作,可能會(huì)改變?cè)瓉淼臄?shù)據(jù),所以必定會(huì)刷新緩存
  • 查詢不同的Mapper.xml
  • 手動(dòng)清理緩存

sqlsession.clearCache(); //手動(dòng)清理緩存

小結(jié):一級(jí)緩存默認(rèn)是開啟的,只在一次SqlSession中有效,也就是拿到連接到關(guān)閉連接這個(gè)區(qū)間段

一級(jí)緩存就是一個(gè)Map

4、二級(jí)緩存

  • 二級(jí)緩存也叫全局緩存,一級(jí)緩存作用域太低了,所以誕生了二級(jí)緩存
  • 基于namespace級(jí)別的緩存,一個(gè)名稱空間,對(duì)應(yīng)一個(gè)二級(jí)緩存
  • 工作機(jī)制
    • 一個(gè)會(huì)話查詢一條記錄,這個(gè)數(shù)據(jù)就會(huì)被放在當(dāng)前會(huì)話的一級(jí)緩存中
    • 如果當(dāng)前會(huì)話關(guān)閉了,這個(gè)會(huì)話對(duì)應(yīng)的一級(jí)緩存就沒了;但是我們想要的是,會(huì)話關(guān)閉了,一級(jí)緩存中的數(shù)據(jù)會(huì)被保存到二級(jí)緩存中
    • 新的會(huì)話查詢信息,就可以從二級(jí)緩存中獲取內(nèi)容
    • 不同的mapper查出的數(shù)據(jù)會(huì)放在自己對(duì)應(yīng)的緩存(map)中

步驟:

開啟全局緩存

<!--顯式的開啟全局緩存-->
<setting name="cacheEnabled" value="true"/>

在要使用二級(jí)緩存的Mapper中開啟

<!--在當(dāng)前Mapper.xml中使用二級(jí)緩存-->
<cache/>
也可以自定義參數(shù)
<cache eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>

測(cè)試

問題:我們需要將實(shí)體類序列化!否則就會(huì)報(bào)錯(cuò)

java.io.NotSerializableException: com.rui.pojo.User

小結(jié):

  • 只有開啟了二級(jí)緩存,在同一個(gè)Mapper下就有效
  • 所有的數(shù)據(jù)都會(huì)先放在一級(jí)緩存中
  • 只有當(dāng)會(huì)話提交,或者關(guān)閉的時(shí)候,才會(huì)提交到二級(jí)緩存中

5、緩存原理

MyBatis緩存功能原理及實(shí)例解析

6、自定義緩存——ehcache

EhCache 是一個(gè)純Java的進(jìn)程內(nèi)緩存框架,具有快速、精干等特點(diǎn),是Hibernate中默認(rèn)的CacheProvider

要在程序中使用ehcache,先要導(dǎo)包

<!-- https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache -->
<dependency>
  <groupId>org.mybatis.caches</groupId>
  <artifactId>mybatis-ehcache</artifactId>
  <version>1.1.0</version>
</dependency>

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站muchs.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞名稱:MyBatis緩存功能原理及實(shí)例解析-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://muchs.cn/article30/djihso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、小程序開發(fā)、電子商務(wù)、營(yíng)銷型網(wǎng)站建設(shè)、定制開發(fā)、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)