前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何实现下单的幂等性

如何实现下单的幂等性

作者头像
十毛
发布2021-07-16 11:18:01
2.1K0
发布2021-07-16 11:18:01
举报

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

幂等性

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

实现方式

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

前端

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

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

后台

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

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 幂等性
  • 实现方式
    • 前端
      • 后台
        • 优化
    • 参考
    相关产品与服务
    云数据库 Redis
    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档