关于乐观锁与悲观锁

很多时候我们提起并发问题,所担心的就是超卖和数据一致性等,如何解决这种问题也是众开发人员一直以来所思考的,目前首先提到的就是悲观锁与乐观锁!
首先需要了解的是,悲观锁与乐观锁其实不是Mysql的锁,和我们说的行锁表锁不是一个东西,而是两个概念
悲观锁:在并发中,出于悲观的想法,认为所有操作会相互影响数据,因此我们在需要操作时需要排队,每次只有1个请求能操作表,这个可以使用表锁来实现,因为是表锁,效率低!
乐观锁:在并发中,出于乐观想法,认为所有操作数据不会相互影响,所以我们不限制操作,直到要更新操作时.乐观锁一般使用版本对比来实现.例如:我们增加某个字段A,我们更新前获取一个A的值是V,更新时对比这个A的值是否依然是V,如果变化了,说明有其他人修改过,直接拒绝此次操作,返回给用户,让用户重试

  • 方法1:在数据表中增加字段version,每次用户在需要更新时,先要拿到前一个版本的version,然后在更新时进行对比,如果两次version不一致,那么就拒绝此次操作,并返回给用户,提示用户再次尝试
  • 方法2:在数据表中增加字段timestamp,依然是更新前获取timestamp的值,更新时进行对比,两次不一致,拒绝操作

注意:乐观锁中的操作需要具有原子性,必须处于同一个事务中
这是我的简单理解,有不对的地方,感谢指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值