高并发下怎样保证接口的幂等性?

幂等性就是同一个操作执行多次,产生的效果一样。如http的get请求,数据库的select请求就是幂等的

在分布式系统中,保证接口的幂等性非常重要,如提交订单,扣款等接口都要保证幂等性,不然会造成重复创建订单,重复扣款,那么如何保证接口的幂等性呢?

前端保证幂等性的方法

按钮只能点击一次

用户点击按钮后将按钮置灰,或者显示loading状态

RPG模式

即Post-Redirect-Get,当客户提交表单后,去执行一个客户端的重定向,转到提交成功页面。避免用户按F5刷新导致的重复提交,也能消除按浏览器后退键导致的重复提交问题。目前绝大多数公司都是这样做的,比如淘宝,京东等

后端保证幂等性的方法

使用唯一索引

对业务唯一的字段加上唯一索引,这样当数据重复时,插入数据库会抛异常

状态机幂等

如果业务上需要修改订单状态,例如订单状态有待支付,支付中,支付成功,支付失败。设计时最好只支持状态的单向改变。这样在更新的时候就可以加上条件,多次调用也只会执行一次。例如想把订单状态更新为支持成功,则之前的状态必须为支付中


  1. update table_name set status = 支付成功 where status = 支付中 
【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章