最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis緩存實現(xiàn)原理及代碼實例解析

 更新時間:2020年08月27日 15:55:55   作者:IT-執(zhí)念  
這篇文章主要介紹了MyBatis緩存實現(xiàn)原理及代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

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

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

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

  1、sqlSession不同

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

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

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

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

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

  工作機制:

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

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

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

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

  4、如何開啟二級緩存:

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

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

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

<cache></cache>

   ?、蹖腜OJO實現(xiàn)序列化接口

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

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

   ?、诿總€select標簽都有useCache="true":false:不使用緩存(一級緩存依然使用,二級緩存不使用)

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

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

   ?、萑峙渲胠ocalCacheScope:

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

      STATEMENT:可以禁用一級緩存。

  6、第三方緩存整合

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

   ?、趯肱c第三方緩存整合的適配包;官方有;

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

    使用Ehcache緩存框架

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

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

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

  eviction:緩存的回收策略:

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

  flushInterval:緩存刷新間隔

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

  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="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:指定數(shù)據(jù)在磁盤中的存儲位置。
l defaultCache:當借助CacheManager.add("demoCache")創(chuàng)建Cache時,EhCache便會采用<defalutCache/>指定的的管理策略

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

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot集成Memcached的項目實踐

    SpringBoot集成Memcached的項目實踐

    Memcached是一個高性能的分布式內(nèi)存對象緩存系統(tǒng),用于動態(tài)Web應用以減輕數(shù)據(jù)庫負載,本文主要介紹了SpringBoot集成Memcached的項目實踐,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 淺談java 面對對象(抽象 繼承 接口 多態(tài))

    淺談java 面對對象(抽象 繼承 接口 多態(tài))

    下面小編就為大家?guī)硪黄獪\談java 面對對象(抽象 繼承 接口 多態(tài))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 2個java希爾排序示例

    2個java希爾排序示例

    java希爾排序示例,希爾排序是插入排序的一種類型,也可以用一個形象的叫法縮小增量法,需要的朋友可以參考下
    2014-05-05
  • Java多線程 原子性操作類的使用

    Java多線程 原子性操作類的使用

    這篇文章主要介紹了Java多線程 原子性操作類的使用,在java5以后,我們接觸到了線程原子性操作,也就是在修改時我們只需要保證它的那個瞬間是安全的即可,經(jīng)過相應的包裝后可以再處理對象的并發(fā)修改,本文總結(jié)一下Atomic系列的類的使用方法,下面一起進入文章了解詳細內(nèi)容
    2021-10-10
  • 記一次用IDEA打開java項目后不能運行的解決方法

    記一次用IDEA打開java項目后不能運行的解決方法

    這篇文章主要介紹了記一次用IDEA打開java項目后不能運行的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • springboot+swagger2.10.5+mybatis-plus 入門詳解

    springboot+swagger2.10.5+mybatis-plus 入門詳解

    這篇文章主要介紹了springboot+swagger2.10.5+mybatis-plus 入門,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Jenkins+maven持續(xù)集成的實現(xiàn)

    Jenkins+maven持續(xù)集成的實現(xiàn)

    這篇文章主要介紹了Jenkins+maven持續(xù)集成的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 使用Java實現(xiàn)創(chuàng)建Excel表單控件

    使用Java實現(xiàn)創(chuàng)建Excel表單控件

    在數(shù)據(jù)填報時,創(chuàng)建Excel表單控件是一項常見的任務,它可以極大地簡化數(shù)據(jù)收集和處理的過程,本文主要介紹了如何使用Java實現(xiàn)創(chuàng)建Excel表單控件,感興趣的可以了解下
    2024-03-03
  • 帶你了解10道java入門面試題

    帶你了解10道java入門面試題

    面試題相信大家都不陌生,想要一個好的工作面試題必不可少的,下面和小編一起來學習與了解Java當中有有些什么面試題吧,希望能給你帶來幫助
    2021-08-08
  • IDEA2024下安裝kubernetes插件配置進行使用的方法

    IDEA2024下安裝kubernetes插件配置進行使用的方法

    IDEA中默認已安裝Kubernetes插件,若未發(fā)現(xiàn),可在市場下載,安裝后,需準備config文件和kubectl.exe,進行路徑配置,可在Workloads-prod下查看和下載目標容器日志,本文介紹IDEA2024下安裝kubernetes插件并配置進行使用,感興趣的朋友一起看看吧
    2024-11-11

最新評論

安乡县| 韩城市| 江陵县| 竹山县| 剑阁县| 垫江县| 遵义县| 遵义县| 宁陕县| 遵义县| 遵义县| 曲水县| 竹山县| 建宁县| 互助| 图片| 年辖:市辖区| 大关县| 孟州市| 高唐县| 丽水市| 健康| 孟州市| 孟州市| 祁阳县| 长兴县| 乃东县| 文水县| 乡城县| 石嘴山市| 东兴市| 白玉县| 广汉市| 开远市| 嵩明县| 布拖县| 新晃| 三门县| 庆元县| 泰来县| 临洮县|