成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

這樣理解 MyBatis 緩存機(jī)制,真香!

數(shù)據(jù)庫 開發(fā)
本文我們?cè)敿?xì)地介紹了 MyBatis 的緩存策略,包括一級(jí)緩存適用于單次請(qǐng)求中的重復(fù)查詢,而二級(jí)緩存適用于跨請(qǐng)求的共享緩存。

為了提高數(shù)據(jù)訪問的性能,MyBatis 采用了一級(jí)緩存和二級(jí)緩存的緩存機(jī)制,那么它們是如何工作的?這篇文章,我們將詳細(xì)介紹這兩種緩存機(jī)制及其工作原理、配置方式和使用場(chǎng)景。

首先,看一張?jiān)韴D:

接著,我們來詳細(xì)地分析它們。

一、一級(jí)緩存

一級(jí)緩存(也叫本地緩存)是 MyBatis 默認(rèn)開啟的,是基于 SqlSession 級(jí)別的緩存。也就是說,在同一個(gè) SqlSession 中,對(duì)于相同的查詢,如果參數(shù)相同,MyBatis 會(huì)從一級(jí)緩存中直接獲取數(shù)據(jù),而不會(huì)再去執(zhí)行數(shù)據(jù)庫查詢。

1. 特點(diǎn)

作用范圍:同一個(gè)SqlSession 實(shí)例。

默認(rèn)開啟:無需額外配置。

清空時(shí)機(jī):

  • 執(zhí)行insert、update、delete 操作時(shí),一級(jí)緩存會(huì)被清空。
  • 調(diào)用SqlSession.clearCache() 方法手動(dòng)清空。

2. 工作原理

當(dāng)使用同一個(gè)SqlSession 執(zhí)行相同的 SQL 查詢時(shí),MyBatis 會(huì)先檢查一級(jí)緩存是否存在對(duì)應(yīng)的查詢結(jié)果。如果存在,則直接返回緩存中的結(jié)果;如果不存在,則執(zhí)行數(shù)據(jù)庫查詢并將結(jié)果放入一級(jí)緩存。

使用示例:

try (SqlSession session = sqlSessionFactory.openSession()) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user1 = mapper.getUserById(1); // 查詢數(shù)據(jù)庫,結(jié)果存入一級(jí)緩存
    User user2 = mapper.getUserById(1); // 從一級(jí)緩存中獲取結(jié)果
    // user1 和 user2 指向同一個(gè)對(duì)象
}

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

二級(jí)緩存是基于 namespace(通常對(duì)應(yīng)于 Mapper 接口)的緩存,作用范圍超出了SqlSession,同一個(gè) mapper 的多個(gè)SqlSession 共享一級(jí)緩存之外的緩存。二級(jí)緩存需要顯式開啟和配置。

1. 特點(diǎn)

作用范圍:同一個(gè) Mapper 的所有SqlSession 實(shí)例。

默認(rèn)關(guān)閉:需要在配置文件中手動(dòng)開啟。

緩存實(shí)現(xiàn):需要配置緩存實(shí)現(xiàn)類,如 MyBatis 自帶的緩存或第三方緩存(例如 Ehcache、Redis)。

序列化:二級(jí)緩存中的對(duì)象需要序列化,以支持跨SqlSession 共享。

2. 啟用步驟

(1) 全局配置:在全局配置文件mybatis-config.xml 中開啟二級(jí)緩存。

<configuration>
  <settings>
      <setting name="cacheEnabled" value="true"/>
  </settings>
  ...
</configuration>

(2) Mapper 配置:在每個(gè)需要使用二級(jí)緩存的 Mapper XML 文件中配置<cache> 標(biāo)簽。

<mapper namespace="com.example.mapper.UserMapper">
  <cache/>
  <!-- SQL 語句定義 -->
</mapper>

或者使用自定義緩存實(shí)現(xiàn):

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

(3) 映射接口注解:可以通過注解方式配置緩存(適用于 MyBatis 3.2 及以上版本)。

@CacheNamespace
public interface UserMapper {
  // 方法定義
}

3. 緩存清理策略

MyBatis 二級(jí)緩存使用的是基于讀寫的緩存策略,當(dāng)涉及數(shù)據(jù)修改操作(insert、update、delete)時(shí),會(huì)清理相關(guān) Mapper 的二級(jí)緩存,以保證數(shù)據(jù)一致性。

使用示例:

// 第一個(gè) SqlSession
try (SqlSession session1 = sqlSessionFactory.openSession()) {
    UserMapper mapper1 = session1.getMapper(UserMapper.class);
    User user1 = mapper1.getUserById(1); // 查詢數(shù)據(jù)庫,結(jié)果存入一級(jí)和二級(jí)緩存
    session1.commit();
}

// 第二個(gè) SqlSession
try (SqlSession session2 = sqlSessionFactory.openSession()) {
    UserMapper mapper2 = session2.getMapper(UserMapper.class);
    User user2 = mapper2.getUserById(1); // 從二級(jí)緩存中獲取結(jié)果
}

三、緩存的高級(jí)配置

1. 緩存刷新策略

可以通過<cache> 標(biāo)簽的屬性來配置緩存的刷新策略,如:

  • eviction:指定緩存的清理策略(默認(rèn) LRU 策略)。
  • flushInterval:指定緩存刷新時(shí)間間隔(單位:毫秒)。
  • size:指定緩存的大小。
  • readOnly:指定緩存是否為只讀。

示例:

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

2. 使用第三方緩存

MyBatis 支持集成多種第三方緩存,如 Ehcache、Redis、Hazelcast 等。以 Ehcache 為例,配置步驟如下:

(1) 添加依賴:

<dependency>
  <groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.10.6</version>
</dependency>

(2) 配置 Mapper:

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

(3) 配置 Ehcache:

創(chuàng)建ehcache.xml 文件,配置緩存策略。

<ehcache>
    <cache name="com.example.mapper.UserMapper"
           maxEntriesLocalHeap="1000"
           eternal="false"
           timeToIdleSeconds="300"
           timeToLiveSeconds="600"
           overflowToDisk="false"/>
</ehcache>

四、緩存使用注意事項(xiàng)

數(shù)據(jù)一致性:使用二級(jí)緩存時(shí),需要確保緩存與數(shù)據(jù)庫的數(shù)據(jù)一致性,特別是在分布式環(huán)境下,推薦使用分布式緩存解決方案。

對(duì)象可序列化:二級(jí)緩存中的對(duì)象需要實(shí)現(xiàn)Serializable 接口,以支持緩存的序列化和反序列化。

避免緩存穿透:對(duì)高頻率的查詢,可以適當(dāng)配置緩存,從而減少數(shù)據(jù)庫的壓力。

緩存命中率:合理設(shè)計(jì)查詢語句和緩存策略,提升緩存的命中率,優(yōu)化性能。

五、總結(jié)

本文,我們?cè)敿?xì)地介紹了 MyBatis 的緩存策略,包括一級(jí)緩存適用于單次請(qǐng)求中的重復(fù)查詢,而二級(jí)緩存適用于跨請(qǐng)求的共享緩存。在實(shí)際應(yīng)用中,應(yīng)根據(jù)具體業(yè)務(wù)需求和系統(tǒng)架構(gòu),選擇合適的緩存策略和實(shí)現(xiàn)方式,以達(dá)到最佳的性能優(yōu)化效果。

責(zé)任編輯:趙寧寧 來源: 猿java
相關(guān)推薦

2025-01-02 14:50:34

MyBatis開發(fā)緩存

2021-07-22 09:55:28

瀏覽器前端緩存

2021-09-04 07:29:57

Android

2023-09-12 14:56:13

MyBatis緩存機(jī)制

2023-09-14 15:15:36

2023-09-07 10:31:27

2022-10-20 18:00:00

MyBatis緩存類型

2019-03-11 15:26:26

HTTPSHTTP密鑰

2019-10-25 09:35:58

HTTPSHTTP通信

2019-11-13 09:08:50

HTTPS安全加密算法

2017-02-14 13:08:45

2009-06-17 15:43:03

Hibernate緩存

2023-02-24 16:46:25

Glide緩存機(jī)制

2020-07-29 10:10:37

HTTP緩存前端

2024-04-29 07:42:20

數(shù)據(jù)庫Mybatis事務(wù)

2022-04-19 07:31:28

事務(wù)隔離機(jī)制數(shù)據(jù)庫

2019-11-15 09:26:36

OAuthWeb系統(tǒng)

2022-07-11 13:09:26

mmapLinux

2019-07-29 11:00:56

MyBatis緩存SQL

2019-12-26 09:50:14

HTTP緩存代理服務(wù)器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: av手机免费在线观看 | 国产精品一区二区av | 野狼在线社区2017入口 | 91视视频在线观看入口直接观看 | 狠狠狠干 | 中文字幕国产精品 | 不卡av电影在线播放 | 日韩综合一区 | 国产激情福利 | 999精品在线 | 日韩福利片 | 国产精品久久久久久福利一牛影视 | www.亚洲| 精品欧美| 在线观看国产 | 欧美色999| 亚洲欧洲一区 | av中文字幕在线播放 | 欧美精品91 | 女人av | 成年人视频在线免费观看 | 五月天综合网 | 天堂av免费观看 | 亚洲国产一区二区三区 | 性一交一乱一透一a级 | 久久99蜜桃综合影院免费观看 | 91免费福利视频 | 免费观看成人鲁鲁鲁鲁鲁视频 | 亚洲一区二区三区视频 | 欧美在线一区二区三区 | 亚洲一区二区在线播放 | 综合成人在线 | 有码在线 | 国产高清一二三区 | 亚洲精精品 | 国产一级在线观看 | 99精品欧美一区二区三区综合在线 | 国产日韩欧美精品一区二区三区 | 成人国产精品久久久 | 91国在线视频 | 丝袜美腿一区二区三区 |