• 首页
  • 邻居
  • 关于
  • 归档
  • 搜索
  • 夜间模式
    ©2020-2026  我的学习笔记 Theme by OneBlog

    我的学习笔记博客

    搜索
    标签
    # 随笔 # Java # 教程 # openwrt # Mysql # SQL # 爬虫 # post # Js调优 # MAVEN
  • 首页>
  • 随笔>
  • 正文
  • MySql的乐观锁,悲观锁怎么实现的

    2024年04月02日 909 阅读 0 评论 904 字

    乐观锁

        乐观锁大多是基于数据版本(version)的记录机制实现。何为数据版本?增加一个版本标识,在基于数据库表的解决方案中,一般是通过未数据库表增加一个version,在读取数据时,将版本号一起读出,之后更新时,对此版本号+1。
    
        此时将提交的版本数据与数据库表中对应记录的当前版本信息进行比对,如果提交的数据版本信息大于当前数据版本信息,则予以更新,否则认为是过期数据。
    
        优点:乐观锁机制避免了长事务中的数据库加锁开销(操作员A和操作员B操作过程中,都没对数据库数据加锁),大大提升了大并发量下的系统整体性能表现

    实现方式:两种方式

    1、加一个字段 数据版本(version)记录机制

    2、加一个字段用时间戳代替版本
    使用场景:

        高并发读取数据环境:当应用程序需要进行大量读取操作时,使用乐观锁可以提交系统性能和吞吐量。乐观锁在在大多数情况下不会锁定资源,减少了性能丢失;
    
        数据一致性的保障:尽管乐观锁减少对资源的锁定,但他们仍然可以提供一定的数据一致性保护。如果多个数据同时读取同一数据,并进行修改,乐观锁能够保证只有最终成功更新的线程才能继续执行后续操作
    
        避免长事务等待:如果程序使用了悲观锁,那么每个读取操作都需要先获得锁,这回导致长事务等待时间增加

    注意:

    乐观锁可以减少对资源的锁定,但在面对大量写入操作的情况下,数据冲突的可能性增大,这时可能需要更多的查询操作来重新获取数据以保持一致性
    悲观锁
    实现方式:

    悲观锁是指在对数据进行操作之前,先加锁,保证在操作期间不会有其他用户修改改数据。

    行级锁:在对某一行进行操作时,先获取该行的锁,其他用户需要等待该行锁的释放才能操作

    表级锁:在对整个表进行操作时,先获取整个表的锁,其他用户需要等待整个表锁的释放才能进行操作

    使用场景:

    适用于频繁对数据修改和更新的场景,例如银行转账,订单处理

    注:悲观锁用之前考虑清楚

    本文著作权归作者 [ admin ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    首页邻居关于归档
    Copyright©2020-2026  All Rights Reserved.  Load:0.015 s
    京ICP备18019712号
    Theme by OneBlog V3.6.5
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。