【乐观锁与悲观锁】—— 每天一点小知识

news2024/11/28 8:45:28

在这里插入图片描述

                                                                              💧 乐观锁与悲观锁 \color{#FF1493}{乐观锁与悲观锁} 乐观锁与悲观锁💧          


🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥


文章目录

    • 🌊一、乐观锁简介
    • 🌊二、悲观锁简介
    • 🌊三、乐观锁和悲观锁的优缺点
      • 乐观锁的优点
      • 乐观锁的缺点
      • 悲观锁的优点
      • 悲观锁的缺点
    • 🌊四、适用场景
  • 🐳结语


🌊一、乐观锁简介

    💧乐观锁是一种并发控制策略,它假设多个事务在执行期间不会发生冲突。当一个事务读取数据时,它会检查该数据的版本号是否与自己的版本号一致。如果一致,则认为该数据未被其他事务修改过,可以安全地进行更新操作;否则,认为该数据已被其他事务修改过,需要重新获取最新版本号并重试更新操作。

🌊二、悲观锁简介

    💧悲观锁也是一种并发控制策略,它假设多个事务在执行期间会发生冲突。当一个事务读取数据时,它会先对该数据行加锁,防止其他事务修改该数据行。当一个事务完成对数据的更新操作后,会释放锁资源,其他事务才能继续访问该数据行。

🌊三、乐观锁和悲观锁的优缺点

乐观锁的优点

  • 不需要额外的存储空间来记录锁定信息。
  • 可以减少死锁的可能性。
  • 可以提高并发性能

乐观锁的缺点

  • 可能存在“脏读”问题。因为其他事务可能已经修改了数据,但是由于版本号不一致,当前事务仍然认为数据是未修改状态。

脏读(Dirty Read)是数据库中事务隔离级别的一种现象,它发生在一个事务读取了另一个事务未提交的数据。换句话说,当一个事务正在修改数据时,另一个事务可以读取到未提交的数据,这样可能导致读取到的数据是不一致或无效的。脏读可以导致数据的不一致性。

  • 可能存在“不可重复读”问题。因为其他事务可能在当前事务读取数据之前就已经修改了数据,导致当前事务读取到的数据不是最新的。

不可重复读(Non-repeatable Read)也是数据库中事务隔离级别的一种现象,它发生在一个事务内多次读取同一数据,但每次读取得到的结果不一致。这种现象可以出现在以下情况:当一个事务读取了某个数据,然后另一个事务修改了该数据并提交,导致第一个事务再次读取时得到了不同的结果。这种情况下,事务无法重复读取相同的数据,因为数据已经发生了变化。

  • 可能存在“幻读”问题。因为其他事务可能在当前事务读取数据之后插入了新的数据行,导致当前事务查询到的结果集发生变化。

幻读(Phantom Read)也是数据库中事务隔离级别的一种现象,它发生在一个事务内多次执行相同的查询,但每次查询得到的结果集不同。幻读通常发生在并发环境下,当一个事务在读取某个范围内的数据时,另一个事务在该范围内插入了新的数据并提交,导致第一个事务再次读取时发现新增了一些数据。这种情况下,事务感觉到发生了"幻觉",好像数据出现了新增的"幻影"。

悲观锁的优点

  • 可以保证数据的一致性。
  • 可以避免“脏读”、“不可重复读”和“幻读”等问题。

悲观锁的缺点

  • 需要额外的存储空间来记录锁定信息。
  • 可能降低并发性能。
  • 如果多个事务同时访问同一数据行,可能会出现死锁问题。

🌊四、适用场景

乐观锁适用于读多写少的场景↓

    💧因为在这种情况下,多个事务同时访问同一数据行的可能性较小,而且不需要保证数据的一致性。

悲观锁适用于读写都比较频繁的场景↓

    💧因为在这种情况下,需要保证数据的一致性,而且需要避免死锁问题。

在这里插入图片描述


🐳结语

🐬初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。

🐟积少成多,滴水成河。文章粗浅,希望对大家有帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/628711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023-06-09:什么是Redis事务?原理是什么?

2023-06-09:什么是Redis事务?原理是什么? 答案2023-06-09: Redis中的事务是以一组命令的形式出现的,这些命令被认为是最小的执行单位。事务可以保证在一个单独独立的隔离操作中执行所有命令,而且所有命令…

linuxOPS基础_linux ACL访问控制

问题:我们学过的所有者身份包含哪些? 答案:ugo,属主,属组,其他。 问题:我们学过的文件权限包含哪些? 答案:rwx,读写执行,特殊s,t ​ ACL,是 Access Contro…

java变量

基本数据类型介绍 基本的数据类型: 整数类型:byte、short、int、long 定义long类型的变量,赋值时需要以"l"或"L"作为后缀。 Java程序中变量通常声明为int型,除非不足以表示较大的数,才使用long。 Java的整…

移动开发行业,就业及毕业,再到无业,夜夜无眠~

近期听得最多的一个消息就是:“今年太不好找工作了” 这是粉丝朋友发来的感叹,三个星期内没有找到工作,在我朋友圈中算短的了,还有不少朋友已经失业快半年了,情况都和这个类似。 是移动互联网市场变了吗? …

字符串是否相等案例s1==s3?

下列代码的运行结果是? public class test { public static void main(String[] args) { String s1 "abc"; String s2 "ab"; String s3 s2 "c"; System.out.println(s1 s3); } } /** C…

【linux】信号的保存和递达处理

上节我们了解到了预备(信号是什么,信号的基础知识)再到信号的产生(四种方式)。今天我们了解信号的保存。信号产生,进程不一定立马就去处理,而是等合适的时间去处理,那么在这段时间内…

[Java基础]面向对象

目录 1、对象和类 2、类之间的关系 3、引用 4、对象的创建和使用 5、构造函数/构造方法 6、内存解析 在这篇文章中,我们将学习面向对象的思想,并学习如何使用面向对象思想编程。在学习面向对象编程之前,我们先了解一下编程语言的发展&a…

Win安装Node.js Npm

1、在使用之前,先类掌握3个东西,明白它们是用来干什么的: npm: nodejs 下的包管理器。 webpack: 它主要用途是通过CommonJS 的语法把所有浏览器端需要发布的静态资源作相应的准备,比如资源的合并和打包。 vue-cli: 用户生成Vue工…

HNU-操作系统OS-作业4(37-40章)

OS_homework_4 这份文件是OS_homework_4 by计科2102 梅炳寅 202108010206 文档设置了目录,可以通过目录快速跳转至答案部分。 第37章 运行程序wolf/OS-homework/file-disks/disk.py 解释一些参数 -G可以查看可视化内容-c可以计算结果。-a 提供待访问的数组-S 将寻道速率改…

深度学习训练营之优化器对比

深度学习训练营之优化器对比 原文链接环境介绍前置工作设置GPU 数据处理导入数据数据集处理数据集可视化 模型构造模型训练结果可视化 原文链接 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:365天深度学习训练营…

deque(简单介绍一下)

deque的基本情况: 简单的来说deque是一个双头队列。且两边的尺寸可以动态收缩或者扩张。 其底层实现相当复杂,而且效率并不高。大多数时候都不会使用。 deque诞生的原因是vector和list的优缺点不可分割。 正好复习一下vector和list的优缺点。 vector的…

手机抓包fiddler配置及使用教程

本文基于Fiddler4讲解基本使用 fiddler抓包原理 注意:Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。当Fiddler退出的时候它会自动注销,这样就不会影响别的 程序。不过如果Fiddler非正常退出&…

学校热水供应系统方案

学校热水供应系统是现代化校园建设的重要组成部分。一套高效、可靠、安全、环保的热水供应系统,不仅能够满足学生、教职工的日常生活需求,也能提高学校形象和竞争力。 在设计学校热水供应系统方案时,需要考虑以下几个方面: 一、热…

【计算机网络复习之路】运输层(谢希仁第八版)万字详解 主打基础

运输层是OSI七层模型中最重要最关键的一层,是唯一负责总体数据传输和控制的一层。运输层要达到两个主要目的:第一,提供可靠的端到端的通信(“端到端的通信” 是应用进程之间的通信);第二,向会话…

【css】box-sizing属性

box-sizing 是一个 CSS 属性,用于指定元素的总宽度和高度的计算方式。它影响内容框的大小,并可以包括或排除元素的填充、边框和外边距。 box-sizing 属性接受两个值: content-box:这是默认值。它指定元素的宽度和高度只包括内容区…

培训班出来拿17K,入职后8天就被裁了....

最近翻了一些网站的招聘信息,把一线大厂和大型互联网公司看了个遍,发现市场还是挺火热的,虽说铜三铁四,但是软件测试岗位并没有削减多少,建议大家有空还是多关注和多投简历,不要闭门造车,错过好…

电脑重装系统后无法开机是什么原因导致的

电脑重装系统是一种常见的解决问题和提升性能的方法,但有时候重装系统后可能会遇到无法开机的问题。本文将介绍一些常见原因和解决方法,帮助您解决电脑重装系统后无法开机的困扰。 工具/原料: 系统版本:windows7系统 品牌型号&…

HNU-操作系统OS-作业3(26-31章)

OS_homework_3 这份文件是OS_homework_3 by计科210X wolf 202108010XXX 文档设置了目录,可以通过目录快速跳转至答案部分。 第26章 运行该程序wolf/OS-homework/threads-intro/x86.py 通过README可知一些重要的标识符如下 -p:指定程序 -t:线程数 -i:指定每执行i个指令…

BT8918D----GPIO模块

0 Preface/Foreword 1 宏定义和数据结构 1.1 gpio_t typedef struct { psfr_t sfr; //GPIO SFR ADDR u8 num; u8 type; //type 1,高压IO,没有300R的强上下拉电阻。 type 0, 普通IO, 有内部300R上下拉电阻。 } gpio_t; 1.…

LeetCode - 18 四数之和

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 18. 四数之和 - 力扣(LeetCode) 题目描述 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], n…