偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

后端:MyBatis緩存知識介紹,你學到了嗎?

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

[[421367]]

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

一、MyBatis一級緩存

1、一級緩存介紹

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

開啟一級緩存

MyBatis的配置文件加上如下:

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

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

一級緩存失效場景

  • SqlSeesion實例不同
  • SqlSeesion實例相同,查詢條件不同
  • SqlSeesion對象相同,查詢條件也相同,但兩次查詢之間執(zhí)行了增刪改操作
  • SqlSeesion對象相同,兩次查詢條件相同,中間無其它增刪改操作,但使用了clearCache()方法

總結(jié)

  • MyBatis一級緩存的生命周期和SqlSession一致。默認是開啟狀態(tài)。
  • MyBatis一級緩存采用HashMap性能較差
  • 分布式環(huán)境下對數(shù)據(jù)庫操作容易引起臟數(shù)據(jù),不推薦開啟MyBatis一級緩存

二、MyBatis二級緩存

1、二級緩存介紹

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

2、為什么有二級緩存?

  • 為了避免和數(shù)據(jù)庫頻繁交互。這是設(shè)計緩存的主要原因。
  • 當Spring和MyBatis整合時,每次查詢之后都要進行關(guān)閉sqlsession,關(guān)閉之后數(shù)據(jù)被清空。所以MyBatis和Spring整合之后,一級緩存是沒有意義的。如果開啟二級緩存,關(guān)閉sqlsession后,會把該sqlsession一級緩存中的數(shù)據(jù)添加到mapper namespace的二級緩存中。這樣,緩存在sqlsession關(guān)閉之后依然存在。

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

3、如何開啟二級緩存

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

  1. <settings> 
  2.    <setting name = "cacheEnabled" value = "true" /> 
  3.  </settings> 

 

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

cache屬性介紹

eviction:設(shè)置回收策略,默認是LRU策略。

  • LRU - 最近最少回收,移除最長時間不被使用的對象
  • FIFO - 先進先出,按照緩存進入的順序來移除它們
  • SOFT - 軟引用,移除基于垃圾回收器狀態(tài)和軟引用規(guī)則的對象
  • WEAK - 弱引用,更積極的移除基于垃圾收集器和弱引用規(guī)則的對象

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

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

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

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

blocking:若緩存中找不到對應(yīng)的key,是否會一直blocking,直到有對應(yīng)的數(shù)據(jù)進入緩存。

注意:

  • 在事務(wù)提交之前,并不會真正存儲到二級緩存,而是先存儲到一個臨時屬性,等事務(wù)提交之后才會真正存儲到二級緩存。因此需要commit事務(wù)之后才能生效。
  • 如果使用的是MyBatis默認緩存,結(jié)果集對象需要實現(xiàn)序列化接口(Serializable),否則會報錯。

4、二級緩存適用場景

  • 適合頻繁訪問且用戶對查詢結(jié)果實時性要求不是很高的查詢,

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

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

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

5、二級緩存失效場景

  • 第一次SqlSession 未提交
  • 對數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)表執(zhí)行了的(insert、update、delete)操作

6、總結(jié)

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

個人博客網(wǎng)站:https://programmerblog.xyz

本文轉(zhuǎn)載自微信公眾號「IT技術(shù)分享社區(qū)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系IT技術(shù)分享社區(qū)公眾號。

 

責任編輯:武曉燕 來源: IT技術(shù)分享社區(qū)
相關(guān)推薦

2021-12-26 18:30:56

嵌入式ARM鏈接

2021-07-29 18:46:52

可視化類型圖形化

2020-07-21 18:54:21

Rust類型轉(zhuǎn)換語言

2023-10-16 08:55:43

Redisson分布式

2022-07-18 07:58:46

Spring工具工具類

2023-04-10 07:40:36

GraphQLRest通信模式

2023-04-27 08:18:10

MyBatis緩存存儲

2024-11-13 09:22:40

2023-06-03 00:05:18

TypeScriptJSDoc掃描器

2022-07-19 08:04:04

HTTP應(yīng)用層協(xié)議

2024-04-12 08:54:13

從庫數(shù)據(jù)庫應(yīng)用

2024-10-18 11:48:00

2024-07-31 09:28:56

2021-08-16 23:52:31

手機內(nèi)存技術(shù)

2020-02-22 15:01:51

后端前端開發(fā)

2024-08-12 15:44:06

2025-02-28 00:03:00

2015-05-26 09:35:29

運維運維危機云計算應(yīng)用

2023-06-06 08:14:18

核心Docker應(yīng)用程序

2023-04-26 22:52:19

視覺人臉檢測人臉對齊
點贊
收藏

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