亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Mybatis緩存的原理是什么

發布時間:2021-06-15 15:12:50 來源:億速云 閱讀:135 作者:Leah 欄目:編程語言

Mybatis緩存的原理是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1、什么是緩存[Cache]

  • 存在內存中的臨時數據。

  • 將用戶經常查詢的數據放在緩存(內存)中,用戶去查詢數據就不用從磁盤上(關系型數據庫數據文件)查詢,從緩存中查詢,從而提高查詢效率,解決了高并發系統的性能問題。

2、為什么要使用緩存

減少和數據庫的交互次數,減少系統開銷,提高系統效率。

3、什么樣的數據需要使用緩存

經常查詢且不易改變的數據

4、Mybatis緩存

  • MyBatis包含一個非常強大的查詢緩存特性,它可以非常方便地定制和配置緩存。緩存可以極大的提升查詢效率。

  • MyBatis系統中默認定義了兩級緩存:一級緩存和二級緩存

    • 默認情況下,只有一級緩存開啟。(SqlSession級別的緩存,也稱為本地緩存)

    • 二級緩存需要手動開啟和配置,他是基于namespace級別的緩存。

    • 為了提高擴展性,MyBatis定義了緩存接口Cache。我們可以通過實現Cache接口來自定義二級緩存

5、一級緩存

一級緩存也叫本地緩存:

  • 與數據庫同一次會話期間查詢到的數據會放在本地緩存中。

  • 以后如果需要獲取相同的數據,直接從緩存中拿,沒必須再去查詢數據庫;

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

  • sqlSession不同

  • sqlSession相同,查詢條件不同

  • sqlSession相同,兩次查詢之間執行了增刪改操作!

  • 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級別的緩存,一個名稱空間,對應一個二級緩存;

  • 工作機制

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

    • 如果當前會話關閉了,這個會話對應的一級緩存就沒了;但是我們想要的是,會話關閉了,一級緩存中的數據被保存到二級緩存中;

    • 新的會話查詢信息,就可以從二級緩存中獲取內容;

    • 不同的mapper查出的數據會放在自己對應的緩存(map)中;

使用步驟:

核心配置文件

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

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

方式一:

<cache/>

方式二:

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

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

8、結論

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

查出的數據都會被默認先放在一級緩存中

只有會話提交或者關閉以后,一級緩存中的數據才會轉到二級緩存中

原理圖:

Mybatis緩存的原理是什么

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

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

AI

凤山市| 金乡县| 唐山市| 类乌齐县| 辽阳市| 崇信县| 准格尔旗| 阳西县| 子长县| 介休市| 延寿县| 牡丹江市| 兴山县| 桦甸市| 天祝| 佛山市| 荆州市| 新河县| 紫阳县| 商河县| 石景山区| 六盘水市| 德庆县| 汽车| 习水县| 阿坝| 壶关县| 宿松县| 台山市| 荔波县| 玉门市| 博野县| 云林县| 柏乡县| 巴彦淖尔市| 垦利县| 上蔡县| 福州市| 姜堰市| 朝阳县| 灵武市|