mysql乐观锁的实现_如何实现乐观锁

mysql乐观锁的实现_如何实现乐观锁使用Mysql实现分布式锁

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

乐观锁不是数据库自带的,需要我们自己去实现

乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁),而在进行更新后,再去判断是否有冲突了。整体思想就是CAS思想。

通常实现是这样的:在表中的数据进行操作时(更新),先给数据表加一个版本(version)字段,每操作一次,将那条记录的版本号加1。也就是先查询出那条记录,获取出version字段,如果要对那条记录进行操作(更新),则先判断此刻version的值是否与刚刚查询出来时的version的值相等,如果相等,则说明这段期间,没有其他程序对其进行操作,则可以执行更新,将version字段的值加1;如果更新时发现此刻的version值与刚刚获取出来的version的值不相等,则说明这段期间已经有其他程序对其进行操作了,则不进行更新操作。

eg:

下单操作包括3步骤:

1、查询出库存信息

select (id,count,version) from t_goodsku where id=#{id}

2、扣减2个库存:

程序中计算:count = count – 2;

3、更新库存:

update t_goodsku

set count={count},version=version+1

where id=#{id} and version=#{
version};

 

1步中查到的version其实是快照(read-commitedread-repeatable隔离机制下的MVCC机制),在这种情况下,第3步去update时,获取锁,where条件中进行判断中的version=#{version},其实是拿当前version和第1步中的快照version进行比对

如果比对成功,说明在这段时间内这条数据没有被其他线程更新过,update成功;

如果对比失败,说明这段时间内这条数据被更新过,那么update失败,报错回滚或自旋。

当然,这里是为了模拟乐观锁的场景,实际上更新库存时一步便可以实现:

1、更新库存:

update t_goodsku

set count=count -2

where id=#{id};

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179602.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月21日 上午8:00
下一篇 2022年10月21日 上午8:00


相关推荐

  • FastJSON解析Json字符串(反序列化为List、Map)

    FastJSON解析Json字符串(反序列化为List、Map)文章目录配置 maven 依赖数据准备 JSON 格式字符串转 Java 对象 DO amp DTOSelfJSONU 测试 amp 调用注意的点 FastjsonAPI 在日常开发与数据库打交道的时候 常有以 Json 格式的字符串存储到数据库的情况 当在 Java 程序中获取到对应的 Json 格式的 String 字符串后 如何才能转换为我们想要的数据格式 比如转换成 Java 中的自定义类等 就需要做出对 Json 数据解析的 而我最近写的接口就遇到了这样的需求 我借助阿里的 Fastjsonapi 实现 json 转化为 JavaP

    2026年3月16日
    2
  • Sql server DATEADD日期函数的使用[通俗易懂]

    Sql server DATEADD日期函数的使用[通俗易懂]DATEADD日期函数DATEADD()函数在日期中添加或减去指定的时间间隔。日:在当前日期上加两天selectDATEADD(day,2,'2014-12-30')201

    2022年7月1日
    46
  • python做得怎么变成exe_Python如何生成exe文件?

    python做得怎么变成exe_Python如何生成exe文件?背景图来源:click斗鱼直播间真实rtmp地址获取(含工具类下载)​zhuanlan.zhihu.com最经典的Python爬虫(图片)案例​zhuanlan.zhihu.com写在前面:之前用python生成过可执行的exe文件(斗鱼推流地址exe,图片exe,芳儿小团子千人成像exe,批量string翻译等等),部分如上链接。今天又遇到:需将word里面的表格的数据提取出来,写入到exce…

    2022年5月4日
    55
  • 微信小程序开发框架和工具库推荐

    微信小程序开发框架和工具库推荐

    2022年3月13日
    124
  • pycharm2022 免费激活码【中文破解版】2022.02.13

    (pycharm2022 免费激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~4KDD…

    2022年4月1日
    65
  • 【Python矩阵转置】| 试使用多方法实现[通俗易懂]

    【Python矩阵转置】| 试使用多方法实现[通俗易懂]矩阵的重要性:实际存储数据通常包含有特征根或是特征向量,是重要。借助Python实现矩阵运算不可或缺。在此过程中,矩阵的转置至关重要。下为几种常见的矩阵转置方法:方法一:(直接法)#step1:#初始化原始矩阵matrix=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]#通过函数指出矩阵的行与列row=len(matrix)col=len(matrix[0])#step2:#交换矩阵的行与列ROW=

    2022年5月5日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号