保证幂等性
Posted 荆棘丛语
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保证幂等性相关的知识,希望对你有一定的参考价值。
转载自知乎的文章:
https://www.zhihu.com/question/27744795/answer/905254616
https://mp.weixin.qq.com/s?src=11×tamp=1574411527&ver=1989&signature=YNBaPmcIcvtWNj8HTWK*ep3rqwB8bbWuPWnbPVr57Pl1DlloM0Y4A7qnOQa48ZMCet4waBlGTLbI*yLsTVl6VOJyQDtLMXrrxKDEvfQYlGXmsVaJ00rb7V7b7xAg4Im5&new=1
首先需要明确幂等的概念:使用相同的参数重复执行,并且能得到相同的结果。重复执行不应该影响系统状态,也不应对系统产生改变。
在支付流程只,为保证特殊情况下,重复支付导致的问题,在进行账户余额更新的时候,可以简单的改为:
update ** set 余额 = 余额-* where user_id =** and 余额 = **
这种乐观锁的形式可以简单的解决幂等的问题,但是,一旦有多个场景或者说多个操作并发等情况下,幂等条件就被破坏了。
这种情况下辅助订单记录表等其他业务表,采用悲观锁的方式,每次操作的时候锁住资源,使用一个显式的状态去表示操作状态。
知乎中提出一个使用RoaringBitmap做一定时间范围的热数据内的操作记录做内存bitmap去重。
以上是关于保证幂等性的主要内容,如果未能解决你的问题,请参考以下文章