保证幂等性

Posted 荆棘丛语

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保证幂等性相关的知识,希望对你有一定的参考价值。

转载自知乎的文章:


https://www.zhihu.com/question/27744795/answer/905254616


https://mp.weixin.qq.com/s?src=11&timestamp=1574411527&ver=1989&signature=YNBaPmcIcvtWNj8HTWK*ep3rqwB8bbWuPWnbPVr57Pl1DlloM0Y4A7qnOQa48ZMCet4waBlGTLbI*yLsTVl6VOJyQDtLMXrrxKDEvfQYlGXmsVaJ00rb7V7b7xAg4Im5&new=1

首先需要明确幂等的概念:使用相同的参数重复执行,并且能得到相同的结果。重复执行不应该影响系统状态,也不应对系统产生改变。




在支付流程只,为保证特殊情况下,重复支付导致的问题,在进行账户余额更新的时候,可以简单的改为:

update ** set 余额 = 余额-* where user_id =** and 余额 = **


这种乐观锁的形式可以简单的解决幂等的问题,但是,一旦有多个场景或者说多个操作并发等情况下,幂等条件就被破坏了。


这种情况下辅助订单记录表等其他业务表,采用悲观锁的方式,每次操作的时候锁住资源,使用一个显式的状态去表示操作状态


知乎中提出一个使用RoaringBitmap做一定时间范围的热数据内的操作记录做内存bitmap去重

以上是关于保证幂等性的主要内容,如果未能解决你的问题,请参考以下文章

如何保证接口的幂等性?常见的实现方案有哪些?

如何保证接口的幂等性?常见的实现方案有哪些?

如何保证接口的幂等性

如何保证接口的幂等性

接口服务中的幂等性设计和防重保证,详细分析幂等性设计几种实现方法

rabbitmq 怎么保证幂等性,数据一致性问题