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

Mybatis 緩存原理及失效情況解析

 更新時間:2019年11月11日 09:07:32   作者:怪氣叔叔  
這篇文章主要介紹了Mybatis 緩存原理及失效情況解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

這篇文章主要介紹了Mybatis 緩存原理及失效情況解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1、什么是緩存[Cache]

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

2、為什么要使用緩存

減少和數(shù)據(jù)庫的交互次數(shù),減少系統(tǒng)開銷,提高系統(tǒng)效率。

3、什么樣的數(shù)據(jù)需要使用緩存

經(jīng)常查詢且不易改變的數(shù)據(jù)

4、Mybatis緩存

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

5、一級緩存

一級緩存也叫本地緩存:

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

6、一級緩存失效的四種情況

  • sqlSession不同
  • sqlSession相同,查詢條件不同
  • sqlSession相同,兩次查詢之間執(zhí)行了增刪改操作!
  • sqlSession相同,手動清除一級緩存
@Test
public void testQueryUserById(){
  SqlSession session = MybatisUtils.getSession();
  UserMapper mapper = session.getMapper(UserMapper.class);
  User user = mapper.queryUserById(1);
  System.out.println(user);
  session.clearCache();//手動清除緩存
  User user2 = mapper.queryUserById(1);
  System.out.println(user2);
  System.out.println(user==user2);
  session.close();
}

所以說,一級緩存就是一個map

7、二級緩存

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

使用步驟:

核心配置文件

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

去每個mapper.xml中配置使用二級緩存,這個配置非常簡單;

方式一:

<cache/>

方式二:

<cache
 eviction="FIFO"
 flushInterval="60000"
 size="512"
 readOnly="true"/>

這個更高級的配置創(chuàng)建了一個 FIFO 緩存,每隔 60 秒刷新,最多可以存儲結果對象或列表的 512 個引用,而且返回的對象被認為是只讀的,因此對它們進行修改可能會在不同線程中的調(diào)用者產(chǎn)生沖突。

8、結論

只要開啟了二級緩存,我們在同一個Mapper中的查詢,可以在二級緩存中拿到數(shù)據(jù)

查出的數(shù)據(jù)都會被默認先放在一級緩存中

只有會話提交或者關閉以后,一級緩存中的數(shù)據(jù)才會轉(zhuǎn)到二級緩存中

原理圖:

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

相關文章

  • Springboot+redis+Vue實現(xiàn)秒殺的項目實踐

    Springboot+redis+Vue實現(xiàn)秒殺的項目實踐

    本文主要介紹了Springboot+redis+Vue實現(xiàn)秒殺的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • SpringBoot的跨域注解@CrossOrigin解析

    SpringBoot的跨域注解@CrossOrigin解析

    這篇文章主要介紹了SpringBoot的跨域注解@CrossOrigin解析,Spring Framework 4.2 GA為CORS提供了第一類支持,使您比通常的基于過濾器的解決方案更容易和更強大地配置它,所以springMVC的版本要在4.2或以上版本才支持@CrossOrigin,需要的朋友可以參考下
    2023-12-12
  • java讀取枚舉類的值轉(zhuǎn)成list和map方式

    java讀取枚舉類的值轉(zhuǎn)成list和map方式

    這篇文章主要介紹了java讀取枚舉類的值轉(zhuǎn)成list和map方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 解答為什么 Java 線程沒有Running狀態(tài)

    解答為什么 Java 線程沒有Running狀態(tài)

    Java 線程沒有Running狀態(tài)指的是一個在 JVM 中執(zhí)行 的線程處于的狀態(tài),本文小編將為大家詳解一二,需要的朋友可以參考下面文章具體內(nèi)容
    2021-09-09
  • Java利用深度搜索解決數(shù)獨游戲詳解

    Java利用深度搜索解決數(shù)獨游戲詳解

    數(shù)獨是一項非常簡單的任務。玩家需要根據(jù)9×9盤面上的已知數(shù)字,推理出所有剩余空格的數(shù)字,并滿足每一行、每一列、每一個粗線宮(3*3)內(nèi)的數(shù)字均含1-9,不重復。本文將利用Java編寫一個程序來解決給定的數(shù)獨任務,感興趣的可以動手嘗試一下
    2022-08-08
  • java實現(xiàn)簡易版圖形界面計算器

    java實現(xiàn)簡易版圖形界面計算器

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡易版圖形界面計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Springboot項目升級2.2.x升至2.7.x的示例代碼

    Springboot項目升級2.2.x升至2.7.x的示例代碼

    本文主要介紹了Springboot項目升級2.2.x升至2.7.x的示例代碼,會有很多的坑,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Spring AI ectorStore的使用流程

    Spring AI ectorStore的使用流程

    SpringAI中的VectorStore是一種用于存儲和檢索高維向量數(shù)據(jù)的數(shù)據(jù)庫或存儲解決方案,它在AI應用中發(fā)揮著至關重要的作用,本文給大家介紹Spring AI ectorStore的使用流程,感興趣的朋友一起看看吧
    2025-03-03
  • java實現(xiàn)大文件分割與合并的實例代碼

    java實現(xiàn)大文件分割與合并的實例代碼

    java實現(xiàn)大文件分割與合并的實例代碼,需要的朋友可以參考一下
    2013-03-03
  • Java判斷范圍型的數(shù)據(jù)是否存在重疊的方法

    Java判斷范圍型的數(shù)據(jù)是否存在重疊的方法

    遇到了個問題,同一天可以輸入多個時間段,但是每個時間段的時間不能出現(xiàn)重疊,這不就是判斷數(shù)據(jù)返回是否有重疊的變種嗎,所以本文給大家介紹了Java判斷范圍型的數(shù)據(jù)是否存在重疊的方法,需要的朋友可以參考下
    2024-07-07

最新評論

英超| 安新县| 商河县| 普宁市| 柳河县| 天柱县| 卢龙县| 巴里| 百色市| 佛坪县| 岢岚县| 周宁县| 壤塘县| 唐山市| 衡阳县| 萝北县| 崇义县| 宜城市| 朝阳县| 郯城县| 禹城市| 台安县| 蒲江县| 钦州市| 绍兴市| 苏尼特左旗| 金湖县| 肥西县| 鄂托克旗| 依兰县| 敖汉旗| 西藏| 普兰店市| 自治县| 阳新县| 唐河县| 舞钢市| 旬阳县| 巩义市| 彭山县| 汉阴县|