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-commited和read-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年3月1日
  • python命名规则标识符_python中有效的标识符

    python命名规则标识符_python中有效的标识符标识符规则1、由大小写字母、数字和下划线组成,只能以字母或者下划线开头。2、不能高阔除下划线以外的其他热河字符,如%……%¥#@3、不能包含换行符、空格和制表符等空白字符。4、不能使用Python中的关键字和约定俗成的名称,如print5、Python区分大小写。…

    2022年9月9日
  • 软件测试前景和发展方向

    软件测试前景和发展方向2019最热门的软件测试趋势毛哥(译)放眼全球,了解技术发展的边界和趋势,有助于组织和个人的发展及竞争力的提升,偶尔看到国外某网站的一篇文章,读来颇值得参考,简单翻译过来,分享一下。也许这篇文章会给你一份指南,让你快速成长与发展。如今,随着世界数字化,我们目睹了技术进步的巨大变化。2019年也将标志着技术和数字化转型的巨大变化,从而要求组织不断创新和重塑自我。#1)敏捷与D…

    2022年4月28日
  • xpath爬取美女图片

    xpath爬取美女图片尝试了一下用xpath爬取图集谷上面的美女图片,这次选择的是阿朱小姐姐,下面详细介绍如何爬取该网站中阿朱小姐姐的全部套图。网址如下:https://www.tujigu.com/t/437/

    2022年7月27日
  • Cover Letter常用范式和模版

    Cover Letter常用范式和模版摘自:https://zhuanlan.zhihu.com/p/26708261;http://muchong.com/html/201401/6920446.html1.什么是Coverletter?CoverLetter,即投稿信,是论文投递时与论文一起发送给编辑的信件,其目的是让编辑在阅读你的论文之前,简单了解你文章的基本情况。Coverletter是编辑对论文的第一印象,也是初步评判你论文是否可以被期刊接收的重要依据(如果编辑看完Coverletter之后一点兴趣也没有,就没有下文了

    2022年5月6日
  • php表单提交并发送邮件给某个邮箱(示例源码)

    php表单提交并发送邮件给某个邮箱(示例源码)

    2021年9月21日

发表回复

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

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