当前位置: 首页 > news >正文

【后端】乐观锁和悲观锁

前置知识点

锁:一种确保数据安全的机制和手段。

在多个线程修改共享变量时,我们可以对修改操作进行加锁。当多个用户修改表中的同一数据时,我们可以对该行数据进行加锁(行锁)。锁是用于控制多个操作在并发环境下按顺序执行,以确保数据安全。

我们在数据库中使用的是MySQL,而MySQL中最常用的存储引擎是InnoDB。InnoDB默认使用行锁。行锁是基于索引的,因此在加锁时必须命中索引,否则将使用表锁。

乐观锁

它认为数据的变动不会过于频繁,因此允许多个事务同时对数据进行修改。乐观锁通常通过在表中添加一个版本号(version)或时间戳(timestamp)来实现,其中版本号是最常用的方法。当事务从数据库中获取数据时,会同时获取该数据的版本号。当事务完成对数据的修改并尝试将其更新到表中时,会将之前获取到的版本号v1与数据当前的最新版本号v2进行比较。如果v1等于v2,说明在数据变动期间没有其他事务对数据进行修改,此时允许事务修改表中的数据,并且更新后的版本号会加1,表示数据已经变动过。如果v1不等于v2,说明在数据变动期间数据被其他事务修改了,此时不允许将数据更新到表中。一般的处理方法是通知用户重新进行操作。与悲观锁不同,乐观锁是由人为控制的。

悲观锁

乐观锁是一种悲观的锁。这种悲观情绪体现在哪里呢?悲观本质上是一种消极的情绪,当锁采用悲观策略时,它认为被保护的数据是极度不安全的,随时可能被改变。当一个事务获得悲观锁后,其他任何事务都不能对该数据进行修改,只能等待锁被释放才能执行。

在数据库中,行锁、表锁、读锁、写锁以及使用同步(synchronized)实现的锁,都属于悲观锁的范畴。 😭

总结

悲观锁:
由于悲观锁可能对系统的吞吐性能造成影响,因此它更适合应用于写操作较多的场景。

乐观锁:
乐观锁的设计目的是为了避免悲观锁带来的缺点,因此更适合应用于读操作较多的场景。

相关文章:

【后端】乐观锁和悲观锁

前置知识点 锁:一种确保数据安全的机制和手段。 在多个线程修改共享变量时,我们可以对修改操作进行加锁。当多个用户修改表中的同一数据时,我们可以对该行数据进行加锁(行锁)。锁是用于控制多个操作在并发环境下按顺…...

软件工程知识梳理1-可行性研究

目的:确定问题是否值得去解决。就是用最小的代价在尽可能短的时间内确定问题是否能够解决。 可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也即是在较高层次上以较抽象的方式进行系统分析和设计的过程。 考察点:技术可…...

2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码

2024美国大学生数学建模E题财产保险的可持续模型详解思路具体代码 前言 很快啊!啪的一下拿到题目就开始做题!简单介绍一下我自己:博主专注建模五年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建…...

pytorch nearest upsample整数型tensor

在用 torch.nn.Upsample 给分割 label 上采样时报错:RuntimeError: "upsample_nearest2d_out_frame" not implemented for Long。 参考 [1-3],用 [3] 给出的实现。稍微扩展一下,支持 h、w 用不同的 scale factor,并测试…...

MySQL的SQL MODE

目录 举例: --常见SQL mode --mysql8 sql_mode 官方文档 https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html --查看全局的SQL MODE select global.sql_mode; --查看当前会话的SQL MODE select session.sql_mode; --运行时修改全局的SQL mode set gl…...

GO EASY 框架 之 NET 05

目录 1、Overview 2、Agent接口源码 3、收发消息 4、AgentHandle接收函数 5、conns.Conn接口 1、Overview 名称:agent.Agent 网络链接 接口; DESC:网络链接,服务端与客户端通信媒介; 封装:进一步封…...

【教程】谈一谈 IPA 上传到 App Store Connect 的几种方法

【教程】谈一谈 IPA 上传到 App Store Connect 的几种方法 引言 在应用开发过程中,将应用程序上传到 App Store Connect 是一个关键的环节。本文将探讨几种常见的 IPA 文件上传方法,包括 Xcode、Application Loader、altool、Appuploader以及Transport…...

面试经典 150 题 -- 滑动窗口 (总结)

面试经典150题链接 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 209 . 长度最小的子数组 思路 : 滑动窗口的思想,取ij0,向后遍历j,记录前缀和[l,r]为s,如果s>target,那么左端点向右移动,直到s…...

JDK8对List对象根据属性排序

文章目录 JDK8对List对象根据属性排序1. 被排序字段为null或者空时候报错2. 使用Stream流排序2.1 根据name升序2.2 根据name升序,score降序 3. 使用Collections排序3.1 根据name升序3.2 根据name升序,score降序 4. 完整的demo JDK8对List对象根据属性排序…...

【2024美国大学生数学建模竞赛】2024美赛C题网球运动中的势头,网球教练4.0没人比我更懂这个题了!!!

【2023美国大学生数学建模竞赛】2024美赛C题 问题分析、数学模型、实现代码、完整论文 引言 本人是计算机博士,拥有10年网球球龄,2023年的温网决赛,熬夜到半夜全称观看完了直播,对于网球规则、比赛的数据非常熟悉,这个…...

python的Flask生产环境部署说明照做成功

最近刚好在我的Linux服务器上部署一个Web服务, 使用了python的Flask框架, 因此本文主要介绍flask在linux环境上的部署。 Flask 是一个轻量级的 Python Web 框架,非常适合快速开发小型到中型的 Web 应用。然而,Flask 自带的服务器通常是用于开发目的&…...

EXCEL VBA调用百度api识别身份证

EXCEL VBA调用百度api识别身份证 Sub BC_识别身份证()Dim SHD, SHX As WorksheetDim AppKey, SecretKey, Token, PathY As StringDim jSon, JSonA, WithHttp As ObjectDim Pic, oDom, oW, jsCode, paramsDim ARX, BRX, DRX, ERX, ZADDim StrText, StrUrl As StringDim StrA, S…...

【每日一题】7.LeetCode——合并两个有序链表

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》|《数据结构与算法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢…...

【零基础学习CAPL】——CAN报文的发送(按下按钮同时周期性发送)

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 文章目录 1.概述2.面板创建3.系统变量创建4.CAPL实现4.1.函数展示4.2.全量报文展示5.效果1.概述 本章主要介绍使用CAPL和Panel在按下按钮时发送周期性CAN报文。 本章主要在“【零基础学习CAPL】——CAN报文的发送(配合P…...

六、Nacos源码系列:Nacos健康检查

目录 一、简介 二、健康检查流程 2.1、健康检查 2.2、客户端释放连接事件 2.3、客户端断开连接事件 2.4、小结 2.5、总结图 三、服务剔除 一、简介 Nacos作为注册中心不止提供了服务注册和服务发现的功能,还提供了服务可用性检测的功能,在Nacos…...

2024美赛C题思路/代码:网球中的动量

美赛直播b站,提前关注:川川菜鸟 美赛辅导预定:美赛服务 去年美赛C题:2023美赛C题 题目翻译 背景 在2023年温布尔登男子单打决赛中,20岁的西班牙新星阿尔卡拉兹击败了36岁的诺瓦克德约科维奇。这是德约科维奇自201…...

ConcurrentHashMap原理详解(太细了)

一、什么是ConcurrentHashMap ConcurrentHashMap和HashMap一样,是一个存放键值对的容器。使用hash算法来获取值的地址,因此时间复杂度是O(1)。查询非常快。 同时,ConcurrentHashMap是线程安全的HashMap。专门用于多线程环境。 二、Concurre…...

EasyExcel根据对应的实体类模板完成多个sheet的写入与读取

1.展示模板一的实体类 import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowH…...

在企业数字化转型过程中,IT运维发挥着怎样的价值?

IT运维软件在企业数字化转型中发挥着重要的价值。从效率、稳定性、安全性和资源利用率以及数据分析决策支持都有巨大的提升。 提高效率 利用自动化巡检功能,实时或定时进行系统巡检,减少人力巡检的繁琐和低效,避免手动操作的失误&#xff0c…...

01-工厂模式 ( Factory Pattern )

工厂模式 Factory Pattern 摘要实现范例 工厂模式(Factory Pattern)提供了一种创建对象的最佳方式 工厂模式在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象 工厂模式属于创建型模式 摘要 1. 意图 …...

用RT-Thread Studio玩转STM32 PWM:从电机控制到呼吸灯,一个框架搞定

用RT-Thread Studio玩转STM32 PWM:从电机控制到呼吸灯,一个框架搞定 在嵌入式开发领域,PWM(脉冲宽度调制)技术堪称"瑞士军刀"般的存在。无论是调节电机转速、控制舵机角度,还是实现LED呼吸灯效果…...

Go语言CQRS模式:命令查询分离

Go语言CQRS模式:命令查询分离 1. CQRS实现 type CommandHandler interface {Handle(cmd *Command) error }type QueryHandler interface {Handle(query *Query) interface{} }2. 总结 CQRS将读操作和写操作分离,优化各自的性能和扩展性。...

Halcon实战:当键盘字符印刷检测遇上位置偏移和亮度不均,差异化模型如何“稳如泰山”?

Halcon差异化模型在键盘字符印刷检测中的实战应用 键盘字符印刷检测是工业视觉领域最具挑战性的任务之一。想象一下,当数千个键盘以每分钟数十个的速度通过传送带时,每个按键上的字符都可能存在印刷缺陷——多墨、少墨、模糊、偏移,甚至完全缺…...

通宵降AI率?10款降AI工具亲测:哪个神器一次过,哪个白花钱

2025 年 12 月 25 日知网 AIGC 检测系统升级,2026 年 4 月 27 日维普 AI 率检测平台升级…2026 毕业季,各大主流 AIGC 检测软件陆续升级系统,识别 AI 痕迹更加精准。 临近毕业,同学们看者飘红的 AIGC 检测报告、纷繁复杂的降 AI 系…...

进口与国产扁线电感参数PK:Coilcraft SER2918H-103KL vs TONEVEE ZER2918-H103K

在大电流电源设计领域,扁线电感因低直流电阻、高饱和电流及良好的散热性能,成为 DC-DC 转换器、VRM 及工业控制等场景的核心器件。美国 Coilcraft(线艺)作为国际品牌,其 SER2900 系列长期占据高端市场;国产…...

解锁包豪斯极简美学:Midjourney V6中实现100%可控几何构成的3步提示工程法

更多请点击: https://intelliparadigm.com 第一章:包豪斯极简美学与Midjourney V6的范式耦合 包豪斯学派所倡导的“形式追随功能”“少即是多”“去除冗余装饰”等核心信条,正以惊人的契合度映射于Midjourney V6的底层生成逻辑——其增强的语…...

HDRP光照性能优化:探针体内存、阴影贴图与反射烘焙的底层控制

1. 这不是又一个“灯光插件”,而是HDRP光照工作流的手术刀我第一次在客户项目里看到UPGEN Lighting HDRP,是在一个实时虚拟制片场景的紧急优化现场。美术总监指着渲染帧率从28fps掉到14fps的监控面板说:“灯光一开,GPU就喘不上气—…...

pytest Code Review skill.md

Skills 架构设计 本文深入探讨 Agent Skills 的技术架构和设计理念,帮助你理解 Skills 如何高效地扩展 Claude 的能力。 核心设计理念 Agent Skills 采用**渐进式披露(Progressive Disclosure)**架构,这是一种现代软件工程中的…...

LeetCode 15:三数之和 | 双指针法详解与进阶应用

LeetCode 15:三数之和 | 双指针法详解与进阶应用 引言 三数之和(3Sum)是 LeetCode 中一道经典的高频面试题,编号为 15,属于 Medium 难度范畴。这道题的核心要求是在一个整数数组中找出所有不重复的三元组,使…...

维萨报告:AI 加速诈骗成消费者新危害,企业需提速应对

AI 加速类 ClickFix 诈骗还记得 ClickFix 吗?这是近年来流行的一种社会工程技术,它通过利用心理弱点绕过传统的网络钓鱼防御。在 ClickFix 攻击中,受害者会被呈现一个看似容易解决的问题,从而诱使他们自己执行恶意操作。例如&…...