基于状态机的乐观锁 ——解决幂等性问题
Posted 死磕java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于状态机的乐观锁 ——解决幂等性问题相关的知识,希望对你有一定的参考价值。
我们通过以下三种方式实现乐观锁,解决高并发下数据一致性,很实用:
1、通过增加版本号实现,我在很多项目上都是通过版本号来实现乐观锁的,但是加版本号毕竟对代码造成了侵入性,而且数据库会增加版本号字段。在很多场景尤其是系统升级时,并不方便。
例子: update table set col =#{col},version =version +1
where id =#{id} and version =#{version }
2、基于状态控制或时间戳实现乐观锁,状态控制实现乐观锁在部分场景可以用到
如:购物下单,逻辑是当订单状态为已付款,才允许发货:
核心SQL update table set status=下一种状态
where id =#{id} and status=#{status}
时间戳同版本号类似。
3、还有一种场景,我们可以判断当库存 - 下单数量>0 实现。如:
update table set amout=amout-#{buys}
where id=#{id} and amout-#{buys}>0
以上是关于基于状态机的乐观锁 ——解决幂等性问题的主要内容,如果未能解决你的问题,请参考以下文章