`

高并发下的重复提交问题

 
阅读更多

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

 

解决方案:

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

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

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

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

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

6、使用事务的隔离级别

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

 

 

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

 

参考文章:http://blog.csdn.NET/flutterkey/article/details/45056333

http://www.cnblogs.com/badboy2008/articles/499283.html

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

 

http://blog.csdn.net/ugg/article/details/41894947

抢红包策略

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

 

分享到:
评论

相关推荐

    JAVA高并发高性能高可用高扩展架构视频教程

    Java-Base64算法_创新_防止表单重复提交 JAVA企业级基础课题(HashMap那些事) 企业架构师必备技能(JAVA核心技术反射) JavaWeb之基础(手写实现Tomcat服务器) java多线程编程 纯手写实现SpringIOC实现过程 JEE企业级...

    防止接口重复提交方案.docx

    项目开发过程中接口面对防止重复请求、前台操作的抖动、快速操作、网络通信或者后端响应慢等等

    高并发核心技术 - 订单与库存1

    1.不多发 2.不少发 1.下单 2.下单同时预占库存 3.付 4.付成功真正减扣库存 5.取消订单 6.回退预占库存 1. 户点击过快,重复提交两次 2. 络

    Hibernate 事物隔离级别 深入探究

    Serializable 隔离级别可以避免脏读、不可重复读、虚读和第二类丢失更新等问题,但是它的代价是性能开销较高。 二、Repeatable Read 隔离级别 Repeatable Read 隔离级别是第二高级别的隔离级别,它可以避免脏读和...

    分布式面试题免费下载咯.md

    在高并发场景的架构里,幂等性是必须得保证的。比如说支付功能,用户发起支付,如果后台没有 做幂等校验,刚好用户手抖多点了几下,于是后台就可能多次受到同一个订单请求,不做幂等很容 易就让用户重复支付了,...

    基于分布式事务RT模式实现适用于hyperf框架的组件源码.zip

    2. 两段提交的强一致性事务,高并发下,支持读已提交的事务隔离级别,数据一致性100%接近mysql xa。 3. 性能超过seata AT模式,由于事务拆分成多个,变成了几个小事务,压测发现比mysql普通事务更少发生死锁。 4. ...

    基于Java(Vue+ElementUI+Echart)+MySQL实现(Web)高校健康上报系统【100011209】

    有解决系统高并发问题的设计; 提供大数据报表并导出Excel表格,相关人员通过报表可以一目了然查看相关信息; 所有列表可以进行综合查询,特别是时间字段,并可以排序; 所有列表可以导出excel文件或者pdf文件; 接...

    SQL Server数据库查询速度慢原因及优化方法

    配置虚拟内存:虚拟内存大小应基于计算机上并发运行的服务进行配置。运行 Microsoft SQL Server? 2000时,可考虑将虚拟内存大小设置为计算机中安装的物理内存的1.5倍。如果另外安装了全文检索功能,并打算运行...

    RabbitMQ相关问题总结.docx

    RabbitMQ 作为一个消息队列系统,具备异步、削峰、负载均衡等高级功能,可以实现消费者和生产者之间的解耦,能够在高并发场景下使得同步访问变为串行访问达到一定量的限流,利于数据库的操作。同时,RabbitMQ 可以...

    基于 Springboot + Redis + Kafka 的秒杀系统,乐观锁 + 缓存 + 限流 + 异步

    高性能:秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键 一致性:秒杀商品减库存的实现方式同样关键,有限数量的商品在同一时刻被很多倍的请求同时来减库存,在大并发更新的过程中都要保证数据的...

    Java面试系列-MySQL

    能说下myisam 和 innodb的区别吗? myisam引擎是5.1版本之前的默认引擎,支持全文检索、...已提交读隔离级别下的事务在每次查询的开始都会生成一个独立的ReadView,而可重复读隔离级别则在第一次读的时候生成一个ReadV

    seconds-kill:基于Springboot + Redis + Kafka的秒杀系统,乐观锁+缓存+限流+异步,TPS从500优化到3000

    如何设计一个秒杀系统系统的特点高效:秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键一致性:秒杀商品减库存的实现方式同样关键,有限数量的商品在同一时刻被很多倍的请求同时来减库存,在大并发...

    使用ZooKeeper实现分布式锁

    在分布式高并发的情况下,多个访问之间拥有唯一的一个订单编号,多次提交的订单不会出现重复的,只能是唯一的,ZooKeeper就很好的解决了唯一性

    数据库系统原理.pdf

    在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题。常见的并发一致性问题包括: 1. 丢失修改:T1 和 T2 两个事务都对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。 2...

    architecture.meituan-dianping:互联网公司架构

    互联网公司经典技术架构以数字开头的目录为...互联网架构/电商/高并发架构交流QQ群群名称:互联网公司架构交流群号:185557854不定期分享一线互联网公司技术架构,电商架构,高并发系统架构,大数据架构,QQ扫码入群:

    architecture.taobao-alibaba:互联网公司架构

    互联网公司经典技术架构 以数字开头的目录为互联网公司的架构文档。 以英文字母A,B,C,D开头的目录按照主题分类的技术架构...不定期分享一线互联网公司技术架构,电商架构,高并发系统架构,大数据架构,QQ扫码入群:

    完美验证码识别系统

    1.调用DLL识别库识别,多线程下不需要加许可证,支持并发识别. 2.调用DLL识别,识别参数设置命令SetWmOption必须与你弄字库时候的设置参数一样,不然会导致识别率下降具体参数说明,请看调用例子里的[我的函数.txt]文档有...

    往届师兄师姐面试真题收集(Java相关岗位)

    多线程可能产生并发问题,可以使用同步技术加以控制。 5、ajax怎么传数据 可以在ajax请求的url后追加请求参数或通过ajax技术中data属性。 6、get和post有什么区别,get为什么比post快 1、get把请求的数据放在...

    data-manage-parent:数据源管理,数据分析,分布式架构设计,分类模块

    接口幂等性原则,防重复提交Token管理GitHub05架构设计:缓存管理模式,监控和内存回收策略GitHub06架构设计:异步处理流程,多种实现模式详解GitHub07架构设计:高并发流量削峰,共享资源加锁机制GitHub08架构设计...

    最新JAVA面试题总结之数据库.docx

    各种隔离级别包括读未提交、读已提交、可重复读和可串行化,每种级别都有其解决的问题和性能考虑。 5. Oracle 中的分页: Oracle 中使用 rownum 来进行分页,这个是效率最好的分页方法。Hibernate 也是使用 rownum...

Global site tag (gtag.js) - Google Analytics