淺談InoDB中的行級鎖

行級鎖的類型:

  1. Record Lock,記錄鎖,僅僅把?條記錄鎖上,記錄鎖分為排他鎖和共享鎖。
  2. Gap Lock,間隙鎖,鎖定?個范圍,但是不包含記錄本身,只存在于可重復讀隔離級別,?的是為了解決可重復讀隔離級別下幻讀的現象。間隙鎖之間是兼容的,兩個事務可以同時持有包含共同間隙范圍的間隙鎖,并不存在互斥關系。
  3. Next-Key Lock:Record Lock + Gap Lock 的組合,鎖定?個范圍,并且鎖定記錄本身。next-key lock 即能保護該記錄,?能阻?其他事務將新紀錄插?到被保護記錄前?的間隙中。

行級鎖的特點:

每次操作鎖住??數據
開銷?,加鎖慢
發?鎖沖突的概率是最低的,并發度是最?的

簡單的next-key鎖原理:
“next-key lock”是InnoDB實現可重復讀(REPEATABLE READ)隔離級別的一種機制。Next-key lock本質上是一個組合鎖,它結合了行鎖(記錄鎖)和間隙鎖(gap lock)。Next-key lock鎖定的是一個前開后閉區間((a, b]),這意味著它鎖定從a到b之間的間隙以及b這條記錄本身,但不包括a。

public class NextKeyLock {private Object start; // 區間開始(不包括)private Object end;   // 區間結束(包括)public NextKeyLock(Object start, Object end) {this.start = start;this.end = end;}public void lock() {// 鎖定從start到end的間隙,但不包括startlockGap(start, end);// 鎖定end這一條記錄lockRow(end);}public void unlock() {// 解鎖間隙unlockGap(start, end);// 解鎖記錄unlockRow(end);}private void lockGap(Object start, Object end) {// 模擬間隙鎖定System.out.println("鎖定從 " + start + " 到 " + end + " 的間隙");}private void lockRow(Object row) {// 模擬記錄鎖定System.out.println("鎖定記錄: " + row);}private void unlockGap(Object start, Object end) {// 模擬間隙解鎖System.out.println("解鎖從 " + start + " 到 " + end + " 的間隙");}private void unlockRow(Object row) {// 模擬記錄解鎖System.out.println("解鎖記錄: " + row);}
}// 示例使用
public class NextKeyLockExample {public static void main(String[] args) {NextKeyLock nextKeyLock = new NextKeyLock("a", "b");try {nextKeyLock.lock();// 在這里執行需要同步的操作} finally {// 確保最后釋放鎖nextKeyLock.unlock();}}
}

注意:這只是一個概念性的表示,為了加強理解方便記,而不是數據庫鎖的實際實現,因為next-key鎖定是由數據庫引擎本身管理的行為。Java不能直接控制數據庫的鎖定機制,而是依賴于數據庫引擎的事務和并發控制。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23228.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23228.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23228.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle 重置system用戶的密碼

荊軻刺秦王 如果您忘記了Oracle數據庫的密碼,可以通過以下步驟來重置密碼: Oracle 版本:linux 11g Release 11.2.0.4.0-64bit Froduction 1. 以SYSDBA權限登錄到數據庫。 conn / as sysdba 2. 停止數據庫實例。 shutdown immediate; 3…

vue 文件預覽mp4、txt、pptx、xls、xlsx、docx、pdf、html、xml

vue 文件預覽 圖片、mp4、txt、pptx、xls、xlsx、docx、pdf、html、xml 最近公司要做一個類似電腦文件夾的功能,支持文件夾操作,文件操作,這里就不說文件夾操作了,說說文件預覽操作,本人是后端java開發,前端vue&#…

Nginx通過轉發代理解決跨域問題

前后端分離開發WEB端(瀏覽器),不可避免的就是要解決跨域問題,因為這是瀏覽器的一種安全機制,當請求的(1)域名、(2)端口、(3)協議 。其中的一項與源…

MySQL如何多表關聯更新

在 MySQL 中,多表關聯更新可以使用 UPDATE 語句與 JOIN 子句結合來實現。以下是一個多表關聯更新的基本示例: 基本語法 UPDATE table1 JOIN table2 ON table1.column = table2.column SET table1.column = new_value, table2.column = new_value WHERE condition;

Linux系統安裝APITable詳細流程與遠程訪問本地平臺數據分析

文章目錄 前言1. 部署APITable2. cpolar的安裝和注冊3. 配置APITable公網訪問地址4. 固定APITable公網地址 💡推薦 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。【點擊跳轉到網站】 前言 v…

AMD顯卡和英偉達顯卡哪個好?

顯卡是計算機中負責處理圖形和視頻輸出的硬件設備,主要分為兩種類型:AMD的A卡和NVIDIA的N卡。那么AMD顯卡和英偉達顯卡哪個好?怎么選? 答:不能一概而論地說哪個好,因為它們各有優勢,選擇應基于…

listbox有scrollviewer,點擊后不會觸發selectionchanged事件

這個問題是因為在ListBox中的ScrollViewer處于焦點狀態時,SelectionChanged事件沒有觸發。這通常是因為ScrollViewer在處理鼠標事件時會優先于ListBox。 為了解決這個問題,可以通過以下方法來確保SelectionChanged事件在ListBox中被觸發: 在…

RE_RC4加密

之前做的幾道題目,rc4也是經常遇到,今來系統學學,記錄一下 對稱加密,即加密和解密的密鑰可以相互推導,也有的是相同的。 RC4 是以字節流處理每一個字節,而不是 DES 的分組操作。 包含三個參數&#xff1…

探索通信技術的未來:2024中國通信技術和智能裝備產業博覽會

探索通信技術的未來:2024通信技術產業專場 隨著信息技術的飛速發展,通信技術已成為現代社會不可或缺的基礎設施。2024年10月11日至13日,青島將迎來一場通信技術的盛會——2024中國軍民兩用智能裝備與通信技術產業博覽會。本次博覽會不僅將展…

面試(03)————多線程

目錄 一、線程和進程的區別? 二、并行和并發的區別? 三、線程創建的方式有哪些? 3.1、繼承Thread類 3.2、實現Runnable接口 3.3、實現Callable接口 3.4、線程池 四、Runnable和Callable的區別? 五、在啟動線程的時候&am…

使用packstack快速部署OpenStack

目錄 資源列表 基礎環境 安裝packstack 安裝OpenStack 本文記錄了基于CentOS操作系統使用packstack快速部署openstack。 資源列表 操作系統配置磁盤IP數量CentOS7.94C8G50G192.168.207.1551 基礎環境 服務器開啟虛擬化,我這里使用的是VMware虛擬機&#xff0…

Redis教程(二十二):Redis的過期刪除和緩存淘汰策略

傳送門:Redis教程匯總篇,讓你從入門到精通 一、過期刪除策略 Redis 中的過期刪除策略是與 Redis 管理鍵的生命周期相關的一系列操作,用于刪除過期的Key以釋放內存。Redis 提供了三種主要的過期刪除策略: 1、惰性刪除(Lazy Expiration) 工作原理:當客戶端嘗試訪問一個…

書生·浦語大模型全鏈路開源體系-筆記作業4

XTuner 微調 LLM:1.8B、多模態、Agent 引自:Tutorial/xtuner/personal_assistant_document.md at camp2 InternLM/Tutorial GitHub 1. XTuner介紹 引自:歡迎來到 XTuner 的中文文檔 — XTuner 0.1.18.dev0 文檔 1.1. 什么是 XTuner ? X…

修改緩存供應商--EhCache

除了我們默認的緩存形式simlpe之外, 我們其實還有許多其他種類的緩存供應 Ehcache就是其中的一種形式 Ehcache在SpringBoot當中的使用: 其實跟我們之前整合第三方的資源是一樣的形式 1>導入依賴: <!-- 更換緩存, 將默認使用的 Simple 更換為Ehcache--> <depe…

Redis 數據拷貝

一、從db0到db1 將redis數據從db0拷貝到db1&#xff0c;可以使用下面腳本進行復制 REDIS_CLI/usr/local/redis/bin/redis-cli hostredis_host portredis_port passwordredis_password old_base0 new_base1${REDIS_CLI} -h ${host} -p ${port} -a ${password} -n $old_base ke…

【go】windows環境設置goos

場景 本地環境&#xff1a;windows 生產環境&#xff1a;linux 現想在本地將go腳本編譯為可執行二進制文件&#xff0c;轉移至生產中進行運行測試。但go build不生效。 方案&#xff08;修改GOOS&#xff09; cmd打開命令行&#xff0c;執行go env查看本地go環境&#xff0c…

PPT視頻如何16倍速或者加速播放

有兩種方式&#xff0c;一種是修改PPT本身&#xff0c;這種方式非常繁瑣&#xff0c;不太推薦&#xff0c;還有一種就是修改視頻本身&#xff0c;直接讓視頻是16倍速的視頻即可。 如何讓視頻16倍速&#xff0c;我建議人生苦短&#xff0c;我用Python&#xff0c;幾行代碼&…

基本元器件 - 電阻

目錄 電阻的選型 貼片封裝的參數 電阻的阻值 絲印表示方法 標準電阻取值 電阻的失效 0 歐姆電阻的使用 電阻的使用場景 分壓電路 分流電路 限流電路 阻抗匹配電路 RC 充放電電路 上下拉電路 其他電路 電阻的選型 一般來說&#xff0c;要考慮以下四個因素&…

【大模型】基于Hugging Face調用及微調大模型(1)

文章目錄 一、前言二、Transformer三、Hugging Face3.1 Hugging Face Dataset3. 2 Hugging Face Tokenizer3.3 Hugging Face Transformer3.4 Hugging Face Accelerate 四、基于Hugging Face調用模型4.1 調用示例4.2 調用流程概述4.2.1 Tokenizer4.2.2 模型的加載4.2.3 模型基本…

【java 中 IO 流分為幾種?】

文章目錄 概要分類&#xff08;1&#xff09;按照流的方向分類&#xff08;2&#xff09;按照操作數據單位分類&#xff08;3&#xff09;按照IO流的角色分類&#xff08;4&#xff09;常用流的總結 總結 概要 在Java中&#xff0c;IO流主要用于處理數據的傳輸&#xff0c;它們…