中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MyBatis緩存實現原理及代碼實例解析

發布時間:2020-10-12 01:13:31 來源:腳本之家 閱讀:253 作者:IT-執念 欄目:開發技術

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

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

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

  1、sqlSession不同

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

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

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

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

  基本namespace級別的緩存:一個namespace對應一個二級緩存:

  工作機制:

  1、一個會話,查詢一條數據,這個數據就會被放在當前會話的一級緩存中:

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

  3、不同namespace查出的數據會放在自己對應的緩存中(map)

    效果:數據會從二級緩存中獲取,查出的數據會默認先放在一級緩存中,只有會話提交或者關閉以后,一級緩存中的數據才會轉移到二級緩存中

  4、如何開啟二級緩存:

    ①開啟全局二級緩存配置:    

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

    ②去mapper.xml中配置使用二級緩存:

<cache></cache>

    ③對應的POJO實現序列化接口

  5、和緩存有關的設置屬性

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

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

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

    ④sqlSession.clearCache();只是清楚當前session的一級緩存;

    ⑤全局配置localCacheScope:

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

      STATEMENT:可以禁用一級緩存。

  6、第三方緩存整合

    ①導入第三方緩存包即可;

    ②導入與第三方緩存整合的適配包;官方有;

    ③mapper.xml中使用自定義緩存

    使用Ehcache緩存框架

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

  7、cache標簽配置參數:   

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

  eviction:緩存的回收策略:

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

  flushInterval:緩存刷新間隔

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

  readOnly:是否只讀:

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

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

  size:緩存存放多少元素;

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

三、ehcache.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/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>

屬性說明:
l diskStore:指定數據在磁盤中的存儲位置。
l defaultCache:當借助CacheManager.add("demoCache")創建Cache時,EhCache便會采用<defalutCache/>指定的的管理策略

以下屬性是必須的:
l maxElementsInMemory - 在內存中緩存的element的最大數目
l maxElementsOnDisk - 在磁盤上緩存的element的最大數目,若是0表示無窮大
l eternal - 設定緩存的elements是否永遠不過期。如果為true,則緩存的數據始終有效,如果為false那么還要根據timeToIdleSeconds,timeToLiveSeconds判斷
l overflowToDisk - 設定當內存緩存溢出的時候是否將過期的element緩存到磁盤上

以下屬性是可選的:
l timeToIdleSeconds - 當緩存在EhCache中的數據前后兩次訪問的時間超過timeToIdleSeconds的屬性取值時,這些數據便會刪除,默認值是0,也就是可閑置時間無窮大
l timeToLiveSeconds - 緩存element的有效生命期,默認是0.,也就是element存活時間無窮大
diskSpoolBufferSizeMB 這個參數設置DiskStore(磁盤緩存)的緩存區大小.默認是30MB.每個Cache都應該有自己的一個緩沖區.
l diskPersistent - 在VM重啟的時候是否啟用磁盤保存EhCache中的數據,默認是false。
l diskExpiryThreadIntervalSeconds - 磁盤緩存的清理線程運行間隔,默認是120秒。每個120s,相應的線程會進行一次EhCache中數據的清理工作
l memoryStoreEvictionPolicy - 當內存緩存達到最大,有新的element加入的時候, 移除緩存中element的策略。默認是LRU(最近最少使用),可選的有LFU(最不常使用)和FIFO(先進先出)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

威远县| 龙泉市| 蒲城县| 潜山县| 道孚县| 南溪县| 石棉县| 龙泉市| 正蓝旗| 呼图壁县| 慈溪市| 天津市| 开阳县| 新丰县| 凤台县| 浦北县| 维西| 开封县| 宝兴县| 鄯善县| 新建县| 永兴县| 景谷| 裕民县| 乌拉特前旗| 天全县| 镇安县| 体育| 阜康市| 庐江县| 上饶市| 邳州市| 洪洞县| 棋牌| 洛隆县| 若羌县| 三都| 黄冈市| 杭锦旗| 师宗县| 永春县|