CAS下ABA问题及优化方案

    科技2025-05-28  7

    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

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

    Processed: 0.010, SQL: 8