日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

后端:MyBatis缓存知识介绍

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 后端:MyBatis缓存知识介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ?

今天給大家分享一下MyBatis緩存知識介紹,希望對大家日常的開發當中能有所幫助!

一、MyBatis一級緩存

1、一級緩存介紹

當我們的程序MyBatis開啟一次和數據庫的會話,MyBatis會自動創建出一個SqlSession對象表示這一次數據庫的會話。在同一個數據庫會話當中,MyBatis提供了一級緩存的方案優化這部分場景,針對相同的SQL查詢語句,會優先命中一級緩存,避免再次對數據庫進行查詢,從而提高查詢性能、減輕數據庫的壓力。

? ? ? ? ? ? ? ?

開啟一級緩存

MyBatis的配置文件加上如下:

<setting name="localCacheScope" value="SESSION"/>

注意:localCacheScope 值有兩個 SESSION(開啟一級緩存)/Statement(關閉一級緩存)

一級緩存失效場景

  • SqlSeesion實例不同

  • SqlSeesion實例相同,查詢條件不同

  • SqlSeesion對象相同,查詢條件也相同,但兩次查詢之間執行了增刪改操作

  • SqlSeesion對象相同,兩次查詢條件相同,中間無其它增刪改操作,但使用了clearCache()方法

總結

  • MyBatis一級緩存的生命周期和SqlSession一致。默認是開啟狀態。

  • MyBatis一級緩存采用HashMap性能較差

  • 分布式環境下對數據庫操作容易引起臟數據,不推薦開啟MyBatis一級緩存

二、MyBatis二級緩存

1、二級緩存介紹

MyBatis一級緩存生命周期是一個SqlSession內部,如果多個 SqlSession 需要共享緩存,則需要開啟二級緩存,開啟二級緩存后,會使用 CachingExecutor 裝飾 Executor,進入一級緩存的查詢流程前,先在CachingExecutor 進行二級緩存的查詢。

? ? ? ? ? ? ? ?

2、為什么有二級緩存?

1、為了避免和數據庫頻繁交互。這是設計緩存的主要原因。

2、當Spring和MyBatis整合時,每次查詢之后都要進行關閉sqlsession,關閉之后數據被清空。所以MyBatis和Spring整合之后,一級緩存是沒有意義的。如果開啟二級緩存,關閉sqlsession后,會把該sqlsession一級緩存中的數據添加到mapper namespace的二級緩存中。這樣,緩存在sqlsession關閉之后依然存在。

當開啟二級緩存數據庫查詢流程先后順序為:二級緩存 -> 一級緩存 -> 數據庫

3、如何開啟二級緩存

二級緩存默認是不開啟的,需要手動開啟二級緩存,MyBatis的配置文件加上如下:

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

然后在還需要在 Mapper 的xml 配置文件中加入?<cache>標簽

cache屬性介紹

eviction:設置回收策略,默認是LRU策略。

  • LRU - 最近最少回收,移除最長時間不被使用的對象

  • FIFO - 先進先出,按照緩存進入的順序來移除它們

  • SOFT - 軟引用,移除基于垃圾回收器狀態和軟引用規則的對象

  • WEAK - 弱引用,更積極的移除基于垃圾收集器和弱引用規則的對象

flushinterval:緩存刷新間隔,緩存多長時間刷新一次,默認不清空,設置一個毫秒值

readOnly: 是否只讀;true 只讀,MyBatis 認為所有從緩存中獲取數據的操作都是只讀操作,不會修改數據。MyBatis 為了加快獲取數據,直接就會將數據在緩存中的引用交給用戶。不安全,速度快。讀寫(默認):MyBatis 覺得數據可能會被修改

size : 緩存可存放多少個元素

type: 指定自定義緩存的全類名(實現Cache 接口即可)

blocking:若緩存中找不到對應的key,是否會一直blocking,直到有對應的數據進入緩存。

注意:

1、在事務提交之前,并不會真正存儲到二級緩存,而是先存儲到一個臨時屬性,等事務提交之后才會真正存儲到二級緩存。因此需要commit事務之后才能生效。

2、如果使用的是MyBatis默認緩存,結果集對象需要實現序列化接口(Serializable),否則會報錯。

4、二級緩存適用場景

1、適合頻繁訪問且用戶對查詢結果實時性要求不是很高的查詢,

這時采用二級緩存可降低數據庫訪問量,提高數據庫的性能,例如:查詢耗時較高的統計報表SQL、按固定時間維度查詢的SQL(每月的訂單信息等等)。

2、適合查詢多寫入少的場景開啟。

因為任何對數據庫的(insert、update、delete)操作都會觸發緩存的更新,從而造成緩存失效。

5、二級緩存失效場景

  • 第一次SqlSession 未提交

  • 對數據庫對應的數據表執行了的(insert、update、delete)操作

6、總結

mybatis二級緩存針對大多數的業務系統都不推薦使用,因為業務系統數據操作比較頻繁、自帶的二級緩存性能也不是很高。二級緩存很難起到實際的作用。可以引用第三方緩存。

IT技術分享社區

個人博客網站:https://programmerblog.xyz

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

總結

以上是生活随笔為你收集整理的后端:MyBatis缓存知识介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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