乐观锁和悲观锁

一 、乐观锁和悲观锁

【悲观锁】意思就是A查询的时候,B不能查询 修改

所谓悲观锁就是基于数据库机制实现的。

比如在在使用select子句的时候加上for update,

那么直到改子句的事务结束为止,任何应用都无法修改select出来的记录。

【乐观锁】个人认为乐观锁就是表里有一个存放版本version的字段,修改的时候查询出来比如version是1,A修改完之后将其version加1为2放入数据库,这时候B也在查询version值也是1,修改完后也加了1放入数据库2,此时插入的话版本号已经有2了,这时候驳回B的请求

所谓乐观锁是基于应用的版本机制来实现的。

数据库中帐户信息表中有一个 version字段,当前值为1;而当前帐户余额字段(balance)为$100。 

1、操作员A 此时将其读出(version=1),并从其帐户余额中扣除$50 ($100-$50)。 

2、在操作员A操作的过程中,操作员B也读入此用户信息(version=1),并从其帐户余额中扣除$20($100-$20)。 

3、操作员A完成了修改工作,将数据版本号加一(version=2),连同帐户扣除后余额(balance=$50),提交至数据库更新,此时由于提交数据版本大于数据库记录当前版本,数据被更新,数据库记录version更新为2。 

4、操作员B完成了操作,也将版本号加一(version=2)试图向数据库提交数据(balance=$80),但此时比对数据库记录版本时发现,操作员B提交的数据版本号为2,数据库记录当前版本也为2,不满足“提交版本必须大于记录当前版本才能执行更新“的乐观锁策略,

因此,操作员B 的提交被驳回。这样就避免了操作员B 用基于version=1 的旧数据修改的结果覆盖操作员A的操作结果的可能。

乐观锁机制避免了长事务中的数据库加锁开销(操作员A 和操作员B操作过程中,都没有对数据库数据加锁),大大提升了大并发量下的系 统整体性能表现。

乐观锁、悲观锁 是从是否锁数据方面进行分类。

共享锁、排它锁是从 锁的类型进行分类。

以上转载自:http://blog.sina.com.cn/s/blog_548bd2090100ir7k.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值