【浅谈电商】如何防止重复下单

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 首先我们要知道什么时候是下单操作。以JD为例:购物车 -> 结算页面 -> 下单页面- 购物车:购物车- 结算页面:此页面可以查看待支付金额,使用的优惠券,填写地址,运费等等。- 下单页面:此页面可以选择结算方式,并且页面展示付款倒计时,也就是说订单已经创建完成。在下单页面时,由于用户点击下单按钮多次、或者重试策略导致在订单服务中接收到了`两次同样`的下单请求。

【浅谈电商】如何防止重复下单

一、前言

最近正在做电商相关的项目,整理一下解决方案并帮助自己巩固知识点,此方案是结合了目前的业务环境,若有更好的解决的方式很高兴与大家一起讨论。

二、什么是重复下单

首先我们要知道什么时候是下单操作。以JD为例:

购物车 -> 结算页面 -> 下单页面

  • 购物车:购物车
  • 结算页面:此页面可以查看待支付金额,使用的优惠券,填写地址,运费等等。
  • 下单页面:此页面可以选择结算方式,并且页面展示付款倒计时,也就是说订单已经创建完成。

在下单页面时,由于用户点击下单按钮多次、或者重试策略导致在订单服务中接收到了两次同样的下单请求。

image.png

三、如何处理重复下单

重复下单场景,第二次的下单会对数据进行打乱,导致系统整体数据异常

image.png

理想的情景:

image.png

找到了问题的根本原因就可以有针对性的去解决问题。

令牌桶

面对用户的多次点击/提交/刷新页面等操作时,我们可以添加一个防重令牌的操作。每次操作前,给当前用户一个一次性的令牌,点击提交时带着令牌一起,后端会先去校验令牌的有效性,这样来避免恶意刷提交。由于令牌的有效性就好比前朝的尚方宝剑也无法斩本朝的官^_^

上述的操作在一定程度上可以解决重复提交的问题,假如当一个人的速度足够快,也是可以合理去提交一个一模一样的订单,这个时候就需要使用缓存的方式防重。

image.png

Redis

当用户下单时,去Redis中获取一个,即一个标识,同一时间只能有一个人能获取到。获取到之后才可以进行后续的逻辑,例如清除购物车、标记消费券等。若此时另外一个下单请求突破防线进入了系统,首先它需要去Redis获取锁,然而锁已经被占用了,它获取不到直接就返回失败。这里主要保证的是接口幂等性。

image.png

小结

  • 令牌桶:可以防止用户很快的提交请求,主要解决的是防重。
  • Redis:可以使同一时间只有一个下单逻辑在运行(同一用户下),主要解决的是接口幂等性。

ps:锁的含义更像一个标识,有了它你可以为所欲为,没有它什么也做不了。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
存储 供应链 监控
反向海淘中下单、支付方式、订单、库存管理、物流与配送
反向海淘指海外消费者通过跨境电商平台购买中国商品。其流程包括:1) 海外消费者在支持多语言和货币的平台上选品、加入购物车并填写准确收货信息下单;2) 支付方式涵盖国际信用卡、第三方支付平台(如PayPal)、本地支付及电子钱包;3) 订单管理涉及订单确认、拣货包装、发货跟踪及售后处理,并通过数据分析优化库存与销售;4) 库存管理强调实时监控、多渠道同步、预警补货及滞销处理;5) 物流方案提供国际快递、邮政包裹、专线物流和海外仓等多种选择,确保全程跟踪和清关服务。
|
5月前
|
缓存 NoSQL Java
京东电商下单黄金链路:防止订单重复提交与支付的深度解析
【10月更文挑战第21天】在电商领域,尤其是在像京东这样的大型电商平台中,防止订单重复提交与支付是一项至关重要的任务。
172 44
|
10月前
|
消息中间件 供应链 NoSQL
电商订单待支付(思路分析)
电商订单待支付(思路分析)
|
设计模式 调度 开发工具
淘东电商项目(65) -聚合支付(异步对账)
淘东电商项目(65) -聚合支付(异步对账)
99 0
|
设计模式 算法 NoSQL
淘东电商项目(57) -聚合支付(支付令牌接口)
淘东电商项目(57) -聚合支付(支付令牌接口)
85 0
|
XML JSON 缓存
不甘心当小卖家的电商,都用了这个接口!
我们做电商,如果你甘心只做一个小卖家,零零散散的收订单。那么,这篇文章你可以掠过。但是,如果你还对电商保有热情,投入激情,相信电商事业会有爆发。请认真看完。
2023最全电商API接口 高并发请求 实时数据 支持定制 电商数据 买家卖家数据
2023最全电商API接口 高并发请求 实时数据 支持定制 电商数据 买家卖家数据
|
XML JSON 缓存
电商卖家如何应用API实现快速准确的发货呢?
这里介绍最简单便捷的方案,就是接入API接口。API的接入自己的独立站,通过接入可以获取产品的销售详情,包括买家地址,产品属性。
|
数据可视化 搜索推荐 API
如何通过拼多多订单API接口获取订单详情
拼多多订单接口获取到订单详情之后,你可以根据需求对订单信息进行处理和利用,例如: 将订单信息导入到 ERP 系统中实现自动化订单处理; 根据订单信息生成发货单、物流面单等相关文档; 对订单的商品信息进行分析,例如常购买的商品、下单时间、下单地点等,为业务决策提供参考; 根据买家信息进行个性化营销,为买家提供更好的购物体验; 对订单信息进行可视化展示,例如订单量趋势图、订单来源分析等,为业务和数据分析提供支持。 以上只是一些简单的示例,具体使用方式应根据实际业务需求和场景而定。需要注意的是,对于涉及用户隐私数据的处理,需要遵守相关的法律法规和隐私保护政策。
|
SQL 前端开发 NoSQL
谈一谈大厂都怎么防止重复下单?
谈一谈大厂都怎么防止重复下单?