概念上区别

乐观锁(Optimistic Locking):顾名思义,对加锁持有一种乐观的态度,即先进行业务操作,不到最后一步不进行加锁,"乐观"的认为加锁一定会成功的,在最后一步更新数据的时候再进行加锁。

悲观锁(Pessimistic Lock):正如其名字一样,悲观锁对数据加锁持有一种悲观的态度。因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。

实现方式:

乐观锁:

•version方式:一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加一。当线程A要更新数据值时,在读取数据的同时也会读取version值,在提交更新时,若刚才读取到的version值为当前数据库中的version值相等时才更新,否则重试更新操作,直到更新成功。

sql实现代码:

update table set x=x+1, version=version+1 where id=#{id} and version=#{version}; 

•CAS(定义见后)操作方式:即compare and swap 或者 compare and set,涉及到三个操作数,数据所在的内存值,预期值,新值。当需要更新时,判断当前内存值与之前取到的值是否相等,若相等,则用新值更新,若失败则重试,一般情况下是一个自旋操作,即不断的重试。

悲观锁:

•是由数据库自己实现了的,要用的时候,我们直接调用数据库的相关语句就可以了(原理:共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程),如行锁、读锁和写锁等,都是在操作之前加锁,在Java中,synchronized的思想也是悲观锁。

使用场景

•乐观锁:比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。•悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。

特点

•乐观锁:乐观锁的特点先进行业务操作,不到万不得已不去拿锁。即“乐观”的认为拿锁多半是会成功的,因此在进行完业务操作需要实际更新数据的最后一步再去拿一下锁就好。•悲观锁:悲观锁的特点是先获取锁,再进行业务操作,即“悲观”的认为获取锁是非常有可能失败的,因此要先确保获取锁成功再进行业务操作。通常所说的“一锁二查三更新”即指的是使用悲观锁。

Mysql悲观锁乐观锁区别使用区别相关推荐

  1. 悲观锁和乐观锁_带你了解MySQL中的乐观锁与悲观锁

    在并发控制编程中锁是一个非常重要的概念,锁对于数据和业务一致性的保证起到关键作用,锁可以是程序层面的,也可以是数据库层面的,今天本文就通过MySQL来说明悲观锁与乐观锁两种常见的锁机制. 悲观锁 悲观 ...

  2. mysql原子性和乐观锁_乐观锁 VS 悲观锁

    1.乐观锁 VS 悲观锁 乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度.在Java和数据库中都有此概念对应的实际应用. 1.1 概念悲观锁:对于同一个数据的并发操作,悲观锁认为自己在 ...

  3. MySQL - 行锁 表锁 乐观锁 悲观锁 读锁 写锁

    MySQL - 行锁 表锁 乐观锁 悲观锁 读锁 写锁 锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足.在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(I ...

  4. 徐无忌MySQL笔记:乐观锁VS悲观锁

    徐无忌MySQL笔记:乐观锁VS悲观锁 完成:第一遍 1.数据库锁的具体实现分为哪两类? 数据库锁的具体实现可以分为乐观锁和悲观锁 2.什么是乐观锁? 乐观锁:顾名思义,就是很乐观,每次去拿数据的时候 ...

  5. mysql悲观群_谈谈mysql的悲观和乐观锁

    悲观锁与乐观锁是两种常见的资源并发锁设计思路,也是并发编程中一个非常基础的概念.之前有写过一篇文章关于并发的处理思路和解决方案,这里我单独将对这两种常见的锁机制在数据库数据上的实现进行比较系统的介绍一 ...

  6. mysql中的乐观锁_MySQL中悲观锁和乐观锁到底是什么?

    索引和锁是数据库中的两个核心知识点,隔离级别的实现都是通过锁来完成的 按照锁颗粒对锁进行划分 ? 锁用来对数据进行锁定,我们可以从锁定对象的粒度大小来对锁进行划分,分别为行锁.页锁和表锁.行锁就是按照 ...

  7. Java锁详解:“独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁+线程锁”

    在Java并发场景中,会涉及到各种各样的锁如公平锁,乐观锁,悲观锁等等,这篇文章介绍各种锁的分类: 公平锁/非公平锁 可重入锁 独享锁/共享锁 乐观锁/悲观锁 分段锁 自旋锁 线程锁 乐观锁 VS 悲 ...

  8. mysql insert 乐观锁_【mysql】关于乐观锁

    一.乐观锁介绍 乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检,乐观锁适用于 ...

  9. 理解悲观锁乐观锁、同步锁、读锁、写锁

    ava 锁分类 Java 中的锁有很多,可以按照不同的功能.种类进行分类,下面是我对 Java 中一些常用锁的分类,包括一些基本的概述 从线程是否需要对资源加锁可以分为 悲观锁 和 乐观锁 从资源已被 ...

  10. java 对变量加锁_Java最全锁剖析:独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁...

    乐观锁 VS 悲观锁 乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度,在Java和数据库中都有此概念对应的实际应用. 1.乐观锁 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会 ...

最新文章

  1. fastjson过滤属性或函数
  2. 泥浆配制_朝政泥浆——广西田阳县百东河水库溢洪道穿越钻泥浆配制简述(3)...
  3. 做报表时用到的一个存储过程
  4. [转载]潜移默化学会WPF(技巧篇)--具有Items元素的控件子项获取(一)
  5. ensp查看历史配置命令_eNSP常用命令
  6. Differential Geometry之第八章常Gauss曲率曲面
  7. wow mysql dbc_WoW的DBC文件内容描述-魔兽有爱论坛 - 一个魔兽世界爱好者的聚集地 uiwow.com - Powered by Discuz!...
  8. Android ToggleButton(状态切换按钮)
  9. Linux USB驱动框架分析
  10. linux的文件permission需要设置,否则会使用as3的urlrequest失败
  11. c语言在线电子词典的实验报告,电子词典系统设计实验报告.doc
  12. Phototshop三种蒙版(图层蒙版、剪贴蒙版、快速蒙版)的基础使用。
  13. 人工智能如何自我进化
  14. laravel5.5 Validator 自定义错误提示语
  15. 使用Python处理excel表格(openpyxl)教程
  16. arx打印dwg为pdf
  17. mysql 简述pk uk fk 的区别和对数据库性能的影响_SQL Server 数据库中PK,UK, DF, CK, FK是什么意思?...
  18. 软件著作权申请——使用了MIT-licence开源框架
  19. 阿里云的「香港」机房大陆访问速度怎么样?
  20. 十款很不错的磁盘碎片整理工具

热门文章

  1. python 为什么要用astype()函数对numpy数据类型进行转换,而不直接指定其dtype?float(64) float(32) int(64) int(32)(转换为整型int)
  2. 深入浅出python机器学习_8.3_神经网络实例_手写识别_MNIST数据集的使用
  3. tf.nn.conv2d()方法
  4. Java线程知识整理汇总
  5. Zookeeper在Kafka中的作用
  6. Elasticsearch 100问(上)
  7. Nginx教程系列五:实现负载均衡配置
  8. xsd java引用_web.xml文件的 xsd引用(或dtd引用)学习
  9. linux java调用so文件路径_Linux平台Java调用so库-JNI使用例子
  10. Zuul 查看所有路由路径与filter(过滤器)