美文网首页
如何实现下单的幂等性

如何实现下单的幂等性

作者: 十毛tenmao | 来源:发表于2021-07-13 23:59 被阅读0次

    用户创建订单的时候,因为重复点击(前端bug)或者网络超时重传等原因,会导致重复请求,那么系统如何即使有重复请求也不会重复下单呢,也就是如何实现幂等性

    幂等性

    • 多次请求的效果跟一次请求的效果一样

    实现方式

    实现幂等性一般需要前后端联合实现

    前端

    • 前端请求的时候需要携带一个唯一ID: 后台会使用该唯一ID进行幂等判断
    • 前端按钮点击后,需要置灰: 减少重复请求次数
    • 前端进入提交页后就生成唯一ID,而不是每次点击按钮时生成

    唯一ID: 生成这个唯一ID的来源,可以是后台,这样可以保证唯一,如果是前端生成的话一般很难保证。不过这个ID只是为了实现幂等性,对唯一性要求并没有那么严格,能够保证一天唯一就已经满足要求了。毕竟隔了一天时间,不可能还是重复请求了

    后台

    • 后台可以处理请求时,首先判断redis中是否已经存在该ID,如果存在,则说明重复请求,就可以返回创建成功;如果不存在,则在redis创建一个key,并设置过期时间为一天
    • 有的方案使用数据库的唯一键来保证幂等性,因为新的订单插入失败,但是这个方案有两个缺点:一是需要由后台生成唯一ID;二是创建订单的时候,一般会先完成促销扣减,库存扣减等操作,然后再插入数据库,这样的话遇到重复请求,处理得代价就比较高

    优化

    • 就算ID不一样,如果订单信息完全一样,也需要提醒用户是否重复下单

    参考

    相关文章

      网友评论

          本文标题:如何实现下单的幂等性

          本文链接:https://www.haomeiwen.com/subject/hluepltx.html