采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,如何防止用户对某一订单重复付款?去重和幂等操作该怎么做呢?
在客户端展示待付款订单时,每一笔订单都有唯一的订单编号,当用户点击付款时,可以把这笔订单编号放入redis中,当这笔订单还处于付款中时,用户再次付款应该不能再次付款,因为该笔订单号还在redis中。无论这次交易是否成功,都应该把该订单号从redis中删除,要不然,如果这次付款失败时,那下次就不能再次付款了。这里假设该订单号在redis中的实效性是永久。当这笔订单付款成功后,就不应该出现在待付款页面。
这个订单号在redis中存在一段时间,比如30分钟,15分钟内未支付,订单复原。防止网络卡顿等造成延迟或重复支付的现象,需要设置为2倍时间,即30分钟。若支付成功,然后在剩下的15分钟内,异步对数据库进行修改数据。
一般都是业务自己做去重,比如唯一业务ID
登录后可查看更多问答,登录/注册
理论+实战,系统掌握RocketMQ核心技术, 挑战高并发抗压实战
10.1k 15
1.2k 11
1.1k 7
1.1k 6