高并发带来的重复提交问题解决方案

本文针对用户因网络等原因造成的重复下单问题提供了解决方案,包括应用缓存锁、唯一标识符控制、数据库字段索引等方法,并提醒不恰当的锁机制可能导致数据库故障。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:用户下订单购买,因为各种原因(网络卡,快递点击等)重复提交2个或者以上一模一样的订单,由于是同时提交的,第一个订单执行扣款生成订单未完成时候,第二个已经进来了,导致付一笔钱购买了2次或多次商品


解决方案:

1、缓存lock,缓存此用户的操作行为,注意紧紧缓存操作的标志,下次进入判断此标志是否存在,存在即不进入数据库事务

2、应用程序application lock,和1相比,会阻塞其他用户的正常行为

3、模仿银行扣款机制,数据表建一个随机唯一标志,每次请求带上这个标志,操作的同时进行修改这个标志

4、应用程序生成唯一标志,数据库做字段的唯一索引

5、扣款为负数的事务进行回滚

6、使用事务的隔离级别

7、使用redis的incr控制用户的并发数,memcache的add也可以实现这种效果,memcached借助cas


不建议使用锁,使用不当,容易造成整个数据库挂掉


参考文章:http://blog.youkuaiyun.com/flutterkey/article/details/45056333

http://mogu.io/prevent-duplicate-requests-4/comment-page-1#comments

http://blog.youkuaiyun.com/ugg/article/details/41894947


抢红包策略

http://www.tuicool.com/articles/zQf6zq

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值