CAS下ABA问题及优化方案

CAS下ABA问题及优化方案

一、什么是CAS

二、什么是ABA问题

三、解决方法

1.  表结构加字段解决

  • 版本号: Version(更新数据时通过对比原始版本号,如果一致则更新,同时版本号version+1)
  • 更新时间:update_time: update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP

2. 优化锁粒度

防止因乐观锁,导致并发失败次数较多,引起用户体验不好,需要控制好锁的粒度。

  • 条件控制:

update wallet set balance = balance-$value where uid = $uid and update_time=$update_time and balance = balance-$value>0

  • 分段加锁
  • 尽可能让所有数据检索都通过索引来完成,避免行锁(走索引)升级为表锁 ;
  • 尽可能较少检索条件,避免间隙锁 ;
  • 尽量控制事务大小,减少锁定资源量和时间长度
  • 锁住某行后,尽量不要去调别的行或表,尽快处理被锁住的行然后释放掉锁
  • 涉及相同表的事务,对于调用表的顺序尽量保持一致
  • 在业务环境允许的情况下, 尽可能低级别事务隔离

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值