乐观锁与悲观锁各自适用场景是什么?

机制

  1. 乐观锁是一种思想,具体实现是,表中有一个版本字段,第一次读的时候,获取到这个字段。处理完业务逻辑开始更新的时候,需要再次查看该字段的值是否和第一次的一样。如果一样更新,反之拒绝。之所以叫乐观,因为这个模式没有从数据库加锁。

  2. 悲观锁是数据库层面加锁,都会阻塞去等待锁。乐观锁优点程序实现,不会存在死锁等问题。他的适用场景也相对乐观。阻止不了除了程序之外的数据库操作。悲观锁是数据库实现,他阻止数据库写操作。再来说更新数据丢失,所有的读锁都是为了保持数据一致性。乐观锁如果有人在你之前更新了,你的更新应当是被拒绝的,可以让用户从新操作。悲观锁则会等待前一个更新完成。这也是区别。具体业务具体分析

实现方式

乐观锁,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,

涉及到三个操作数,数据所在的内存值,预期值,新值。当需要更新时,判断当前内存值与之前 取到的值是否相等,若相等,则用新值更新,若失败则重试,一般情况下是一个自旋操作,即不 断的重试。

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

使用场景

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

悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你被这些网络迷题难倒过吗?

全世界有3.14 % 的人已经关注了数据与算法之美消失的正方形这是数学游戏大师马丁加德纳在《从惊讶到思考》一书中提到过的例子。重新摆放分割的小块图形后,上面的正方形中少了一个小方格,它去了哪里?我们不妨实际操作一下,做两个全…

tplink-wr841n无线路由接入到局域网三层交换机方法

把tplink-wr841n无线路由接入到局域网三层交换机方法:1.设置无线路由wan口动态获取IP,获取上级三层交换机分配的IP。不与本地局域网一个网段。2.设无线路由的lan口IP为管理IP,与wan口在不同一网段。WAN口IP地址和LAN口IP地址不能处于同一子网&#xff0c…

php值比较大小,PHP_PHP浮点比较大小的方法,本文实例讲述了PHP浮点比较大 - phpStudy...

PHP浮点比较大小的方法本文实例讲述了PHP浮点比较大小的方法。分享给大家供大家参考,具体如下:/*** 浮点数一般是不能用来比较大小的,但是我们可以用一种变通的的方式* 用var_dump输出浮点是看不出效果的,可以用serialize查看* 1.round 2.浮点…

温故知新,.Net Core遇见Blazor(FluentUI),属于未来的SPA框架

什么是BlazorBlazor是一个使用.NET生成交互式客户端WebUI的框架:使用C#代替JavaScript来创建信息丰富的交互式UI。共享使用.NET编写的服务器端和客户端应用逻辑。将UI呈现为HTML和CSS,以支持众多浏览器,其中包括移动浏览器。与新式托管平台(如…

看来要先拒绝37%的女人,才能找到真爱

全世界有3.14 % 的人已经关注了数据与算法之美在每期《非诚勿扰》节目上,面对一位位男嘉宾,24位单身女生要做出不止一次“艰难的决定”:到底要不要继续亮灯?把灯灭掉意味着放弃了这一次机会,继续亮灯则有可能结束节目之…

Java程序员从笨鸟到菜鸟之(三十)javascript弹出框、事件、对象化编程

一:弹出框 JavaScript中有三种弹出框:警告(alert)、确认(confirm)以及提问(prompt)。 1.警告(alert) 在访问网站的时候,你遇到“咚”的一声,一个小窗口出现在你面前,上面写着一段警示性的文字,或是其它的提示信息。如…

php如何将页面嵌入在另一盒子里,如何将一个盒子在显示在浏览器的正中间_html/css_WEB-ITnose...

1、通过CSS来实现1)position: absolute; top:50%; left:50%; margin-left:-101px; margin-top:-101px;2) position:absolute; left:0; top:0; right:0; bottom:0; margin:auto;2、通过JS来实现说明 在普通文档流里,margin: auto; 的意思是设置元素的margin-top和mar…

.Net日志之nlog

1. 介绍NLog是适用于各种.NET平台&#xff08;包括.NET标准&#xff09;的灵活&#xff0c;免费的日志记录平台&#xff0c;支持数据库、文件、控制台。2. 输入到文件2.1 引用nuget包<PackageReference Include"NLog" Version"4.7.6" /><PackageR…

为了证明自己有多能喝,理工科的学生竟做出这种事

全世界有3.14 % 的人已经关注了数据与算法之美当酒鬼止不住地说“我没有醉”、“再来一杯”的时候&#xff0c;他基本上已经醉得不行了。此时&#xff0c;他会说出一堆毫无逻辑的话&#xff0c;让旁人听了不知所云。这就是最为常见的酒鬼形象了。直到某一天&#xff0c;死理性派…

65 + iPhone应用程序网站创意设计灵感(上篇)

这里是一个巨大的艺术创作的iPhone APP网站设计的灵感收集。这些网站设计&#xff0c;特殊的配色方案&#xff0c;详细的图标和高品质的图形使用&#xff0c;如此精彩。希望能给你带来灵感。 Analog App Courier App Thermo App Faces Ecoki Motionoto Barista Moneybook App L…

php程序员跟java一样吗,【后端开辟】php程序员能够转java吗?

php顺序员可以转java吗&#xff1f;可以。关于专业顺序员来讲&#xff0c;在差别的开辟场景下采纳差别的编程言语是比较罕见的事变&#xff0c;所以许多顺序员在事情一段时候以后都邑控制多种差别的编程言语&#xff0c;比方不少Web顺序员都邑同时控制Java、PHP、C#等编程言语。…

你管这叫线程安全?

来来来&#xff0c;面试八股文&#xff1f;今天我们从什么叫"线程安全"聊起&#xff1f;文末"边吃边聊"。今日份的干粮&#xff1a;1.什么叫线程安全&#xff1f;2.线程安全与变量的关系&#xff1f;•变量又与堆/栈/静态存储区有密切关系什么叫线程安全&a…

经济学家告诉你,胸越大的女生越会花钱!

全世界有3.14 % 的人已经关注了数据与算法之美大概两周前回加拿大的航班上&#xff0c;我在机舱尾部跟一位空姐聊了很久。当空姐小妹双眼向下一瞥&#xff0c;略微停顿之后问我“班组要在这里呆四天&#xff0c;不知道该干什么去”的时候&#xff0c;我认认真真的为自己叹了口气…

讲100个科学道理,不如做这些有趣的理科实验!

玩具和学习看似是两个对立的东西&#xff0c;孩子天性爱玩&#xff0c;家长却希望孩子能多学习。不一定非要啃课本才能汲取知识&#xff0c;有时候&#xff0c;在轻松有趣的游戏中也能学到课堂上学不到的知识。让学习变得有趣、高效——给孩子讲100个科学道理&#xff0c;不如带…

《权力》读书笔记

1 为什么权力只为某些人所拥有我们生活在一个充满等级制度的世界里&#xff0c;等级的存在就意味着竞争&#xff0c;而且越往上&#xff0c;职位就越少&#xff0c;竞争也就越激烈。只有了解权力的原则&#xff0c;并愿意运用它们的人&#xff0c;才可以参与这样的竞争&#xf…

$_GET,$_post与$_REQUEST

PHP $_GET $_GET 变量是一个数组&#xff0c;内容是由 HTTP GET 方法发送的变量名称和值。 PHP $_POST $_POST 变量用于收集来自 method"post" 的表单中的值。 $_POST 变量 $_POST 变量是一个数组&#xff0c;内容是由 HTTP POST 方法发送的变量名称和值。 $_POST 变…

嘘!偷偷教你们一个在双十一省钱的办法!

各位小可爱&#xff0c;大可爱&#xff0c;大家晚上好~一年一度的双11即将到来&#xff01;&#xff01;&#xff01;小木冒着被砍头的风险为大家争取了好多好多福利绝对比平时更优惠更省钱哦&#xff01;&#xff01;&#xff01;活动时间&#xff1a;10月27日-11月11日&#…

ML.NET 示例:图像分类模型训练-首选API(基于原生TensorFlow迁移学习)

ML.NET 版本API 类型状态应用程序类型数据类型场景机器学习任务算法Microsoft.ML 1.5.0动态API最新控制台应用程序和Web应用程序图片文件图像分类基于迁移学习的TensorFlow模型再训练进行图像分类DNN架构&#xff1a;ResNet、InceptionV3、MobileNet等问题图像分类是深度学习学…

php gd库 函数 建立gif,PHP_PHP GD库生成图像的几个函数总结,使用GD库中提供的函数动态绘 - phpStudy...

PHP GD库生成图像的几个函数总结使用GD库中提供的函数动态绘制完成图像以后&#xff0c;就需要输出到浏览器或者将图像保存起来。在PHP中&#xff0c;可以将动态绘制完成的画布&#xff0c;直接生成GIF、JPEG、PNG和WBMP四种图像格式。可以通过调用下面四个函数生成这些格式的图…

HDU 1964 Pipes

HDU_1964 这个题目只需要把求回路数量的dp方程改写成取最优解的dp方程即可。 更多和插头dp相关的题目可以参考胡浩的博客&#xff1a;http://www.notonlysuccess.com/index.php/plug-dp-complete/。 #include<stdio.h> #include<string.h> #define MAXD 15 #define…