当前位置:网站首页>乐观锁和悲观锁
乐观锁和悲观锁
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已经修改数据。
二者简单比较
比较点 | 乐观锁 | 悲观锁 |
---|---|---|
优点 | 不对数据库加锁,更新时才加锁,保证吞吐量 | 利用锁机制实现数据的顺序方式执行 |
缺点 | 可以人为操作,可能被外来事务干扰,出错 | 抑制其他事务对数据的操作,影响系统的吞吐量 |
应用场景 | 读比较多 | 写比较多 |
参考文章:
边栏推荐
猜你喜欢
第二十四课、二十五课,高级光照(blinn),Gamma矫正
VMware下安装win10
(selenium)Service geckodriver unexpectedly exited. Status code was: 64
postgresql 范围查询比索引查询快吗?
A Spark SQL online problem troubleshooting and positioning
Come n times - 06. Print the linked list from end to end
02 Truffle TutorialToken 示例
js右侧圆点单页滚动介绍页面
【Redis高手修炼之路】Jedis——Jedis的基本使用
loadrunner-Controller负载测试-各模块功能记录01测试场景设计
随机推荐
Hematemesis summarizes thirteen experiences to help you create more suitable MySQL indexes
来n遍剑指--09. 用两个栈实现队列
高并发-高可用-高性能
JSP exception对象简介说明
js滚动条滚动到指定元素
(selenium)Service geckodriver unexpectedly exited. Status code was: 64
The future of the hybrid interface: conversational UI
MUI获取相机权限
感情危机,朋友的网恋女友要和他闹分手,问我怎么办
js空气质量aqi雷达图分析
MySQL 高级(进阶) SQL 语句 (一)
JSP session的生命周期简介说明
利用frp服务器进行内网穿透ssh访问
【TCP/IP】网络模型
Aleo Testnet3规划大纲
如何将亚马逊广告添加到您的 WordPress 网站(3 种方法)
第二十三课,抗锯齿(Anti Aliasing)
MySQL----多表查询
自定义v-drag指令(横向拖拽滚动)
剑指offer-解决面试题的思路