当前位置:网站首页>乐观锁和悲观锁
乐观锁和悲观锁
2022-07-31 09:30:00 【棒棒吃不胖】
定义解释
乐观锁——认为数据变化不太频繁,允许多个事务对数据同时改动,通过增加版本或时间戳实现
悲观锁——认为数据不安全,会频繁改动。一个事务获得悲观锁后,其他事务无法对数据进行修改,直到锁被释放
搭建测试环境
假设Eric和Frank都有100元,他们需要一次性把钱花出去。


最后得到的结果是下图

乐观锁的案例表现
1)Eric将100元花出去
begin;
update x set money=money-100, version=version+1 where id=1 and version=0;
commit;
2)查询结果
Eric成功花出去了100元

3)再次开启一个新事务,让Eric花钱
命令依旧是update x set money=money-100, version=version+1 where id=1 and version=0
结果如下:

会发现修改的行数为0,没有任何修改。
悲观锁的案例表现
1)会话A中开启事务,查询操作

2)会话B中开启事务,查询操作
(此时会话A中的事务还没有提交)

3)在会话A中,Eric花钱(数据修改)

4)在会话B中进行查询

可知,事务A已经修改数据。
二者简单比较
| 比较点 | 乐观锁 | 悲观锁 |
|---|---|---|
| 优点 | 不对数据库加锁,更新时才加锁,保证吞吐量 | 利用锁机制实现数据的顺序方式执行 |
| 缺点 | 可以人为操作,可能被外来事务干扰,出错 | 抑制其他事务对数据的操作,影响系统的吞吐量 |
| 应用场景 | 读比较多 | 写比较多 |
参考文章:
边栏推荐
猜你喜欢
随机推荐
【RISC-V】risc-v架构学习笔记(架构初学)
开放麒麟 openKylin 自动化开发者平台正式发布
matlab常用符号用法总结
ecshop安装的时候提示不支持JPEG格式
loadrunner-controller-view script与load generator
Come n times with the sword--05. Replace spaces
Come n times - 09. Implement queues with two stacks
JS中原型和原型链的详细讲解(附代码示例)以及 new关键字具体做了什么的详细讲解
【职场杂谈】售前工程师岗位的理解杂谈
js实现2020年元旦倒计时公告牌
第五章
高并发高可用高性能的解决方案
js radar chart statistical chart plugin
&#x开头的是什么编码?
数据中台建设(六):数据体系建设
Kotlin 优点
让动画每次重复前都有延迟
loadrunner-Controller负载测试-各模块功能记录01测试场景设计
js以变量为键
Kotlin—基本语法(一)









