MyBatis緩存實現(xiàn)原理及代碼實例解析-創(chuàng)新互聯(lián)

一、一級緩存(本地緩存)

創(chuàng)新互聯(lián)公司服務(wù)緊隨時代發(fā)展步伐,進行技術(shù)革新和技術(shù)進步,經(jīng)過十余年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計師、專業(yè)的網(wǎng)站實施團隊以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對網(wǎng)站進行網(wǎng)站制作、成都做網(wǎng)站、建設(shè)、維護、更新和改版,實現(xiàn)客戶網(wǎng)站對外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。

  sqlSession級別的緩存。一級緩存是一直開啟的;SqlSession級別的一個Map與數(shù)據(jù)庫同一次會話期間查詢到的數(shù)據(jù)會放在本地緩存中。以后如果需要獲取相同的數(shù)據(jù),直接從緩存中拿,沒必要再去查詢數(shù)據(jù)庫;

  一級緩存失效情況(沒有使用到當(dāng)前一級緩存的情況,效果就是,還需要再向數(shù)據(jù)庫發(fā)出查詢):

  1、sqlSession不同

  2、sqlSession相同,查詢條件不同。(當(dāng)前一級緩存中還沒有這個數(shù)據(jù))

  3、sqlSession相同,兩次查詢之間執(zhí)行了增刪改操作(這次增刪改可能對當(dāng)前數(shù)據(jù)有影響)

  4、sqlSession相同,手動清除了一級緩存。

二、二級緩存(全局緩存)

  基本namespace級別的緩存:一個namespace對應(yīng)一個二級緩存:

  工作機制:

  1、一個會話,查詢一條數(shù)據(jù),這個數(shù)據(jù)就會被放在當(dāng)前會話的一級緩存中:

  2、如果會話關(guān)閉:一級會話中的緩存會被保存到二級緩存中;新的會話查詢信息,就可以參照二級緩存中的內(nèi)容。

  3、不同namespace查出的數(shù)據(jù)會放在自己對應(yīng)的緩存中(map)

    效果:數(shù)據(jù)會從二級緩存中獲取,查出的數(shù)據(jù)會默認先放在一級緩存中,只有會話提交或者關(guān)閉以后,一級緩存中的數(shù)據(jù)才會轉(zhuǎn)移到二級緩存中

  4、如何開啟二級緩存:

   ?、匍_啟全局二級緩存配置:    

<setting name="cacheEnabled" value="true"/>

   ?、谌apper.xml中配置使用二級緩存:

<cache></cache>

    ③對應(yīng)的POJO實現(xiàn)序列化接口

  5、和緩存有關(guān)的設(shè)置屬性

    ①cacheEnabled=true:false:關(guān)閉緩存(二級緩存關(guān)閉)(一級緩存一直可用的)

    ②每個select標(biāo)簽都有useCache="true":false:不使用緩存(一級緩存依然使用,二級緩存不使用)

    ③ 每個增刪改標(biāo)簽的:flushCache="true":(一級二級都會清除)

   ?、躶qlSession.clearCache();只是清楚當(dāng)前session的一級緩存;

   ?、萑峙渲胠ocalCacheScope:

      本地緩存作用域:(一級緩存SESSION);當(dāng)前會話的所有數(shù)據(jù)保存在會話緩存中;

      STATEMENT:可以禁用一級緩存。

  6、第三方緩存整合

   ?、賹?dǎo)入第三方緩存包即可;

    ②導(dǎo)入與第三方緩存整合的適配包;官方有;

   ?、踡apper.xml中使用自定義緩存

    使用Ehcache緩存框架

<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>

  7、cache標(biāo)簽配置參數(shù):   

<cache eviction="FIFO" flushInterval="60000" readOnly="false" size="1024"></cache>

  eviction:緩存的回收策略:

    • LRU – 最近最少使用的:移除最長時間不被使用的對象。
    • FIFO – 先進先出:按對象進入緩存的順序來移除它們。
    • SOFT – 軟引用:移除基于垃圾回收器狀態(tài)和軟引用規(guī)則的對象。
    • WEAK – 弱引用:更積極地移除基于垃圾收集器狀態(tài)和弱引用規(guī)則的對象。
    • 默認的是 LRU。

  flushInterval:緩存刷新間隔

    緩存多長時間清空一次,默認不清空,設(shè)置一個毫秒值。

  readOnly:是否只讀:

    true:只讀;mybatis認為所有從緩存中獲取數(shù)據(jù)的操作都是只讀操作,不會修改數(shù)據(jù)。mybatis為了加快獲取速度,直接就會將數(shù)據(jù)在緩存中的引用交給用戶。不安全,速度快。

    false:非只讀:mybatis覺得獲取的數(shù)據(jù)可能會被修改。mybatis會利用序列化&反序列的技術(shù)克隆一份新的數(shù)據(jù)給你。安全,速度慢

  size:緩存存放多少元素;

  type="":指定自定義緩存的全類名;實現(xiàn)Cache接口即可;

三、ehcache.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="/tupian/20230522/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
 <!-- 磁盤保存路徑 -->
 <diskStore path="java.io.tmpdir"/>
 
 <defaultCache 
  maxElementsInMemory="1" 
  maxElementsOnDisk="10000000"
  eternal="false" 
  overflowToDisk="true" 
  timeToIdleSeconds="120"
  timeToLiveSeconds="120" 
  diskExpiryThreadIntervalSeconds="120"
  memoryStoreEvictionPolicy="LRU">
 </defaultCache>
</ehcache>

新聞標(biāo)題:MyBatis緩存實現(xiàn)原理及代碼實例解析-創(chuàng)新互聯(lián)
鏈接URL:http://muchs.cn/article10/iphgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作微信公眾號、虛擬主機企業(yè)建站、網(wǎng)站導(dǎo)航關(guān)鍵詞優(yōu)化

廣告

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

網(wǎng)站托管運營