这篇文章,写的很详细了。
探讨一下实现幂等性的几种方式
本质:
利用数据库的乐观锁,悲观锁,唯一约束。
总结:
1、第一种方案,利用数据库的乐观锁机制
(update t_order set status = 1 where order_id = trade_no and status = 0 ,判断状态。这种思想类似CAS操作,如果符合我的预期值,我就干。)
2、第二种方案,利用数据库的悲观锁机制
(使用 for update,行级锁,优点:设计简单。缺点:如果多个实例,多个线程进来,只有一个线程获取锁,其他线程处于等待状态。影响并发性能)
3、第三种方案,新建一张表,建立唯一索引。
(优点:设计简单。缺点:如果业务变大,这张表会成为性能的瓶颈)
按照最优排序:乐观锁 > 唯一约束 > 悲观锁