浅谈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.mzph.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;它们…