最近上了一节秒杀实战课,里面讲了一些高并发情况下的事故处理方案,笔者在此记录一下

目录

  • 一、悲观锁的实现方式
    • 注意事项
  • 二、乐观锁的实现方式

一、悲观锁的实现方式

悲观锁表明的是用户对他的每次操作都觉得会有其他用户同时进行操作,导致数据出现问题,此时悲观锁会在用户操作时将表锁住,让其他的用户不能对该条进行任何操作,具体实现如下:

select * from product where id = 1 for update;

使用了for update之后就会自动将该条数据锁定,其他用户无法对该条数据进行查询、修改、删除的操作。

注意事项

  • 1、当查询条件是主键的时候,哪怕该主键所对应的记录不存在也不会进行锁表操作(相当于没有对表做任何操作);
  • 2、当查询条件不是主键且当前查询条件的记录不存在的时候,使用悲观锁会把整个表锁住(也就是表级锁)

一般来说能查询数据的select语句使用for update都是行级锁

二、乐观锁的实现方式

乐观锁就是用户觉得他操作的数据在当前这个时刻不一定会有人和他同时进行操作,只需要在更新的时候判断一下当前记录的版本号和之前查询出的版本号是否一致即可,具体实现方式如下:

update product set count = 10, version = version + 1 where id = 1 and version = 1;

悲观锁和乐观锁的具体实现方式相关推荐

  1. 面试官问:说说悲观锁、乐观锁、分布式锁?都在什么场景下使用?有什么技巧?...

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 如何确保一个方法,或者一块代码在高并发情况下,同一时间只能 ...

  2. 探索JAVA并发 - 悲观锁和乐观锁

    作者:acupt,专注Java,架构师社区合伙人! 什么是悲观锁,什么是乐观锁,它们是如何实现的? 定义 悲观锁:对世界充满不信任,认为一定会发生冲突,因此在使用资源前先将其锁住,具有强烈的独占和排他 ...

  3. mysql悲观锁和乐观锁

    悲观锁 查出来的数据必须是根据索引查出来的,不然锁表. # 语法 select * from table where id = 1 for update; 乐观锁 使用一个标识 cas 比较后替换 如 ...

  4. 数据库事务的悲观锁和乐观锁

    转载出处:http://www.hollischuang.com/archives/934 在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数 ...

  5. 说说悲观锁、乐观锁、分布式锁

    作者 | 张飞洪 来源 | https://www.cnblogs.com/jackyfei/p/12142840.html 如何确保一个方法,或者一块代码在高并发情况下,同一时间只能被一个线程执行, ...

  6. Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景

    一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--悲观锁( ...

  7. Oracle的悲观锁和乐观锁

    为了得到最大的性能,一般数据库都有并发机制,不过带来的问题就是数据访问的冲突.为了解决这个问题,大多数数据库用的方法就是数据的锁定. 数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁.什么叫 ...

  8. 悲观锁和乐观锁_乐观锁和悲观锁 以及 乐观锁的一种实现方式-CAS

    悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞知道它拿到锁.传统的关系型数据库里面就用到了很多的这种锁机制,比如行锁,表锁等 ...

  9. 华为应用锁退出立即锁_面试官:你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景...

    前言 生活中用到的锁,用途都比较简单粗暴,上锁基本是为了防止外人进来.电动车被偷等等. 但生活中也不是没有 BUG 的,比如加锁的电动车在「广西 - 窃·格瓦拉」面前,锁就是形同虚设,只要他愿意,他就 ...

  10. mysql隔离级别与悲观锁、乐观锁

    2019独角兽企业重金招聘Python工程师标准>>> 1.什么是悲观锁,乐观锁 悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性.但随之而来的就是数据库性能的大 ...

最新文章

  1. javascript——Array类型
  2. S3C6410 KeyPad驱动(上)
  3. K8S滚动更新示例演示
  4. /etc/services
  5. matlab 传输速率,处理速率转换 - MATLAB Simulink - MathWorks 中国
  6. 没有Wi-Fi?三种方法通过iPhone让Macbook连上网络
  7. (6)售货机verilog与Systemverilog编码
  8. [版本1.11.4已修复]简书安卓UI界面Bug:主界面消失
  9. typedef 定义函数指针
  10. python 中读取yaml
  11. Apache Jemeter 参数化
  12. 书还没出,已经在chinapub被虐了
  13. 软考信息系统项目管理师知识点总结1
  14. ElasticJob分布式调度,监听器的使用附源码(四)
  15. 极坐标变换原理和用法
  16. android显示大图片
  17. 股票期权 【小白手册】(含大量图解)
  18. AWS免费套餐避坑攻略:查看账户下所有region的资源,及时关停不需要的服务
  19. javascript的基础-1
  20. python拼音怎么写-Python汉字转换成拼音

热门文章

  1. 如何理解最短路径中的“松弛”操作
  2. Unreal Engine 4 系列教程 Part 2:蓝图教程
  3. Mac专业练习打字软件:Master of Typing 3
  4. skimage库(一)
  5. 用docker快速安装xwiki
  6. Excel数据透视图
  7. 数据库难还是学java难,mysql数据库比java难吗,女生学数据库难吗
  8. 【WebGIS】Openlayers流动线与风场效果
  9. 计算机对象的概念对象的特性,面向对象的基本概念
  10. liskov替换原则_构造函数与打破Liskov替代原则