如何防止订单重复

如何防止订单重复

在整个下单流程中,哪里重复操作影响最大?确认订单只是修改订单状态从未支付改为待支付而已,不会对我们的主要业务产生影响,而在支付的时候,主要由第三方平台,我们也可以不用管,主要重复操作影响最大的还是在用户下单的这个过程。

若网络堵塞时点击了很多次,那订单服务就会生成多个订单信息,即使只有一个消息有效,其他请求也是对我们系统造成了资源的浪费,对用户体验也很差,有多个订单信息。

一种方式可以通过前端点击下单后,按钮置灰,也就是不可点。但这种只能防止正常用户,用户实际可以绕过前端进行操作,所以后端也必须做相应处理。

可以通过redis的setNX来保证唯一幂等性,setNX的作用是保存Key,Value时,当Value值为空,就可以正常保存返回true,这样就能保证多次操作只能存储一次值,其他操作都会失败。

当然还需要设置过期时间,比如3-5秒,用户一般不会重复提交订单,有也是恶意的,(超过过期时间,就可以再次下单)

关键还是需要怎样的Key去保证这样的幂等性,可以通过用户Token+商品URL+指定key为键,保证当前用户,当前商品,还可以加个指定Key,因为可能这个页面也有其他业务(也就是非下单操作)需要保证幂等性。

(可以通过注解+AOP,处理保证setNX成功才能进行后续操作,否则抛出相应日志)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值