美文网首页
MySQL中的乐观锁

MySQL中的乐观锁

作者: youthcity | 来源:发表于2018-12-09 23:57 被阅读61次

什么是乐观锁

与悲观锁相比,乐观锁认为数据一般不会发生变化,因此不会加锁,但是在更新数据时会对数据进行比较,若数据没有变化,则进行更新,否则不进行更新。

适用场景

适用于读多写少的场景。

如何实现乐观锁

方式1:版本号机制

给表增加一个 version 版本号字段,具体流程如下:

  • 读取数据时,将数据的版本号数据一同读出;
  • 数据每次发生更新时,将版本号加 1;
  • 提交数据时,将当前版本号与之前读出的版本号进行对比。若相同,则更新;否则,更新失败。

方式2:记录时间戳

原理与方式一相同,给表增加一个记录操作的时间戳字段,当发生数据更新时,将当前时间戳与更新前获取的时间戳进行对比,若相同,则允许更新,且同时更新操作时间戳字段,否则更新失败。

优缺点

优点

  • 不会发生任何锁和死锁
  • 可增加吞吐量
  • 避免了长事务中的数据库加锁开销

缺点

对于写多的场景并不适用,因为当写操作非常频繁时,更新失败的几率就越大,上层逻辑进行retry的次数也会增多,从而降低了系统的性能。

总结

不管是乐观锁还是悲观锁,其目的都是为了保障数据的一致性。乐观锁与悲观锁的区别在于,乐观锁会在更新前比较数据是否发生变化,若变化则更新失败。悲观锁则是等待前一个事务完成才执行自己的操作。

参考资料

相关文章

  • 表锁和行锁

    MySQL中的锁总体可以分为悲观锁和乐观锁。悲观锁MySQL中有自带的锁。乐观锁需要自己写程序控制来实现乐观锁的功...

  • rails中乐观锁和悲观锁的使用

    MySQL乐观锁和悲观锁的介绍可以参考之前的一篇文章MySQL中的锁(行锁,表锁,乐观锁,悲观锁,共享锁,排他锁)...

  • (4)头条mysql

    1、MySQL有哪些锁,乐观锁和悲观锁实现 如果避免、减少锁等待、团队中如何监控MySQL的锁等待的情况 锁监控:...

  • 秒杀随笔

    方法: mysql悲观锁 mysql乐观锁 PHP+redis分布式锁 PHP+redis乐观锁(redis wa...

  • mysql中的乐观锁和悲观锁

    关于mysql中的乐观锁和悲观锁面试的时候被问到的概率还是比较大的。 mysql的悲观锁: 其实理解起来...

  • MySQL中的乐观锁

    什么是乐观锁 与悲观锁相比,乐观锁认为数据一般不会发生变化,因此不会加锁,但是在更新数据时会对数据进行比较,若数据...

  • 乐观锁和悲观锁

    参考来源 深入理解乐观锁与悲观锁 乐观锁的一种实现方式——CAS mysql乐观锁总结和实践 乐观锁和悲观锁 悲观...

  • MYSQL 悲观锁和乐观锁

    前文我们提到了表锁,行锁的这些概念,今天我们来谈谈mysql的悲观锁和乐观锁。何为乐观锁?顾名思义,乐观锁就是乐观...

  • 分布式锁

    1,MySQL 排他锁 2,mysql 乐观锁 3,zk getchild 的 create distrutbit...

  • mysql的悲观和乐观锁

    谈谈mysql的悲观和乐观锁 - 周伯通的麦田 - 博客园 悲观锁 select … for update 乐观锁...

网友评论

      本文标题:MySQL中的乐观锁

      本文链接:https://www.haomeiwen.com/subject/gobkhqtx.html