`

高并发下的重复提交问题

 
阅读更多

用户下订单购买,因为各种原因(网络卡,快递点击等)重复提交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

 

分享到:
评论

相关推荐

    springboot2.1+redis+拦截器 防止表单重复提交

    首先,我们需要理解表单重复提交的问题。当用户点击提交按钮多次或者由于网络延迟导致的重复提交,服务器可能会接收到相同的数据请求多次,这可能会对业务逻辑产生不良影响。例如,在电商网站中,如果用户多次点击...

    java高并发写入用户信息到数据库的几种方法

    在 Java 高并发环境下,写入用户信息到数据库可能会出现一些问题,例如多个用户同时写入导致数据不一致或重复写入。为了解决这些问题,需要使用一些特殊的方法来确保数据的一致性和高并发写入的性能。本文主要介绍了...

    java+redis+lua实现重复提交操作拦截.zip

    在IT行业中,尤其是在分布式系统和高并发场景下,防止重复提交是确保数据一致性的重要策略。本项目"java+redis+lua实现重复提交操作拦截"旨在解决这个问题,通过结合Java、Redis和Lua技术来构建一个高效的解决方案。...

    token-springMVC 防止重复提交

    - **缺点**:增加了系统的复杂性,需要管理和维护令牌,可能导致额外的内存消耗,特别是在高并发场景下。 5. **扩展技术**:除了Token机制,还可以结合其他方法,如`HttpSessionOncePerRequestFilter`过滤器,或者...

    微博支付-高并发场景下数据一致性问题探究.pdf

    在高并发场景下,微博支付系统面临的主要挑战之一是数据一致性问题。这涉及到多个系统间的交互,包括前端用户界面、支付网关、后端数据库以及各种缓存服务,如MySQL、Redis等。在这个环境中,保证数据的一致性是至关...

    Struts之Token解决表单那重复提交

    在处理用户交互时,尤其是表单提交,一个常见的问题是防止表单的重复提交。这可能导致数据的不一致性和其他问题。本文将深入探讨如何在Struts框架中利用Token机制来解决这个问题。 一、表单重复提交问题 表单重复...

    springboot+redis+AOP 防止表单重复提交

    这种方法对于处理高并发场景下的表单提交特别有效,避免了数据库的额外负担。 总结起来,结合Spring Boot、Redis和AOP,我们可以构建出一个优雅的解决方案,防止表单的重复提交,保障系统的稳定性和数据一致性。...

    高并发高可用mysql优化

    在IT行业中,数据库是系统的核心组成部分,特别是在高并发场景下,MySQL作为一款广泛使用的开源关系型数据库,其性能优化显得尤为重要。本篇文章将基于“高并发高可用MySQL优化”这一主题,深入探讨MySQL的索引优化...

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

    在Java Web开发中,接口重复提交是一个常见的问题,尤其是在高并发API的场景下,可能导致数据库中出现重复数据,增加系统负载,甚至引发系统稳定性问题。以下是一个详细的防止接口重复提交的解决方案,主要涉及...

    高并发性的设计和优化

    ### 高并发性的设计与优化 #### 数据库设计 数据库设计是实现高并发系统的关键步骤之一,主要包括逻辑设计、物理设计、性能设计以及并发设计。 - **逻辑设计**:涉及数据库概念模型的设计,如确定实体及其关系。...

    springboot防重复提交工具包

    在Spring Boot应用中,防重复提交是一个重要的功能,特别是在高并发和事务一致性要求较高的场景下。这个名为"springboot防重复提交工具包"的资源很可能提供了一种解决方案,帮助开发者防止用户因网络延迟或其他原因...

    易语言MySql高并发操作模块源码 效率很高

    通过上述方法,这个【MySql高并发操作模块源码】能够显著提升MySQL数据库在高并发环境下的表现,使系统更稳定、更快速。为了充分利用这个模块,开发者需要根据自己的具体需求进行适当的修改和调整,以适应不同的业务...

    高并发下接口幂等性解决方案_2.docx

    高并发下接口幂等性解决方案 幂等性是高并发系统中非常重要的概念,它是指在高并发下,操作的多次执行所产生的影响均与一次执行的影响相同。例如,在前端重复提交选中的数据时,后台只产生对应这个数据的一个反应...

    基于SpringBoot实现Java高并发之秒杀系统源码(含数据库).rar

    为了防止重复提交,秒杀操作应设计为幂等的,即同一个请求无论执行多少次,结果都应保持一致。这可以通过记录已秒杀成功的用户ID来实现。 以上这些技术点在"基于SpringBoot实现Java高并发之秒杀系统源码(含数据库)...

    高并发下的接口幂等性解决方案.docx

    高并发下的接口幂等性解决方案是指在高并发环境下,如何确保接口的幂等性,避免重复提交、重复操作等问题。幂等性是指一个操作,不论执行多少次,产生的效果和返回的结果都是一样的。 在实际系统中,有很多操作是幂...

    高并发下接口幂等性解决方案.docx

    "高并发下接口幂等性解决方案" 在高并发下,接口幂等性是非常重要的概念,它可以确保在高并发情况下,接口的执行结果是一致的,不会因为并发的原因而导致结果的不确定性。 幂等性概念: 幂等操作是指可以使用相同...

    truts2防止重复提交共2页.pdf.zip

    但这会增加服务器的负担,不适用于高并发场景。 3. **请求参数(Request Parameters)**:Truts2的`params`拦截器可以检查请求参数,如果发现有重复的提交,就会忽略后续的处理。这种方法适用于简单的场景,但可能...

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

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

    Java高并发笔记.pdf

    - **定义**:活锁是指两个或多个线程不断重复尝试解决问题,但结果是没有进展的情况。与死锁不同的是,活锁中的线程并没有互相阻塞,而是不断地尝试并失败。 - **原因**:常见的活锁原因是错误的算法设计或不适当的...

    基于注解+redis实现表单防重复提交.zip

    在IT行业中,表单防重复提交是一个常见的需求,特别是在高并发和数据一致性要求较高的场景下。本项目"基于注解+redis实现表单防重复提交.zip"提供了一种利用SpringBoot框架来解决这一问题的方法。这里我们将深入探讨...

Global site tag (gtag.js) - Google Analytics