日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Mybatis | Mybatis 一级缓存、二级缓存、三级自定义缓存(Redis)

發布時間:2024/1/18 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis | Mybatis 一级缓存、二级缓存、三级自定义缓存(Redis) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mybatis 一級緩存、二級緩存、三級自定義緩存Redis實現

  • 一、Mybatis 緩存
  • 二、一級緩存 SqlSession級別
    • 1.如何開啟一級緩存
    • 2.什么時候清除緩存?
    • 3.什么時候緩存失效?
    • 4.存在的問題
    • 5.查詢 加事務與不加事務
  • 三、二級緩存 Mapper級別
    • 1.開啟二級緩存
    • 2.緩存清除
    • 3.存在的問題
  • 四、三級緩存 第三方自定義緩存(這里用Redis實現)
    • 1.使用 Mybatis整合Redis實現分布式緩存
  • 五、總結

一、Mybatis 緩存

Mybatis為什么要有緩存?

???????Mybatis 提供緩存當然是為了減少了與SQL數據庫的I/O交互, 提升查詢效率。
???????在Mybatis中存在兩種緩存,一級緩存與二級緩存。下面我們說說一級緩存與二緩存

二、一級緩存 SqlSession級別

Mybaits 中一級緩存也就做本地緩存,一級緩存是在會話也就是SqlSession層面實現的,一級緩存的作用范圍是在同一個SqlSession中,不同的SqlSession及時查詢相同的數據也不會走緩存。

1.如何開啟一級緩存

???????一級緩存是默認開啟的, 需要開啟事務。不加事務每次查詢都會創建SqlSession.

2.什么時候清除緩存?

  • 當執行增刪改方法時會清除緩存。
  • MyBatis全局配置屬性localCacheScope配置為Statement時,那么完成一次查詢就會清除緩存。
  • 是否配置了flushCache=true屬性,如果配置了則會清除一級緩存。

3.什么時候緩存失效?

  • SqlSession 需要開啟事務才會生效。否則每次查詢都壞創建一個新的SqlSession
  • 不同的SqlSession 對應不同的緩存
  • 同一個 SqlSession 查詢條件不同 也會不走緩存。
  • 手動清空緩存,調用SqlSession clearCache()方法。

4.存在的問題

???????在同一個SqlSession中 兩次相同條件查詢中,第一次查詢后 然后手動修改表數據或者另一個SqlSession對象修改了數據庫或者分布式情況下數據發生了修改 那么第二次查詢是直接走緩存,查詢結果依舊相同,會存在數據不一致問題。


5.查詢 加事務與不加事務

加事務 只創建了一次SqlSession


不加事務 創建了兩次

三、二級緩存 Mapper級別

Mybatis 二級緩存是mapper級別的 需要手動開啟,他的作用范圍更廣也就是mapper文件的一個命名空間(namespace)中。

1.開啟二級緩存

二級緩存需要手動開啟

  • application.properties 中配置
  • mybatis-plus.configuration.cache-enabled=true
  • 在mapper.xml文件中加入下邊配置 或者 使用注解SQL開發的話使用@CacheNamespace來開啟
  • <cache/> 或者 <cache-ref namespace="com.xxx.xxx.mapper.UserMapper"/>
  • 如果某個sql 不想走緩存的話 需要在像如下操作useCache=false
  • <select id="findLogs" resultType="map" useCache="false">
  • 查詢返回結果集需要實現序列化接口
  • 當第一次查詢事務提交后, 才會真正的存取二級緩存中
  • 2.緩存清除

    • 當執行增刪改方法時會清除緩存。

    3.存在的問題

    ??????? 二級緩存也存在同一級緩存一樣的問題,只不過二級緩存的作用域比一級緩存大,

    在同一個命名空間(namespace)中 兩次相同條件查詢中,第一次查詢后 然后手動修改表數據或者分布式情況下數據發生了修改 那么再次查詢是直接走緩存,查詢結果依舊相同,會存在數據不一致問題。

    四、三級緩存 第三方自定義緩存(這里用Redis實現)

    Mybatis 的一級緩存與二級緩存 只適用于單體項目,在分布式服務或者微服務架構下 都會出現數據不一致問題。所以Mybatis 為我們提供了自定義緩存 我們可以集成很多三方中間件來做緩存 這里就那Redis來說一下。

    1.使用 Mybatis整合Redis實現分布式緩存

  • POM坐標
  • <dependency><groupId>org.mybatis.caches</groupId><artifactId>mybatis-redis</artifactId><version>1.0.0-beta2</version></dependency>
  • application.properties 中配置
  • # 開啟緩存 mybatis-plus.configuration.cache-enabled=true##redis 配置 redis.host=localhost redis.port=6379 redis.connectionTimeout=5000 redis.password= redis.database=0
  • mapper.xml 文件中
  • <cache type="org.mybatis.caches.redis.RedisCache"/>

    五、總結

    MyBatis 的一級緩存 二級緩存 都不建議使用,它們只適用于單體項目,現在基本都是分布式或者微服務 框架使用的話會存在數據不一致問題。

    在我開發這幾年,用的都是微服務架構。也沒用過Mybatis 的緩存 都是手動在代碼中做的redis 緩存。手動在代碼中做redis緩存我覺得更靈活。

    總結

    以上是生活随笔為你收集整理的Mybatis | Mybatis 一级缓存、二级缓存、三级自定义缓存(Redis)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。