首页 > 其他分享 >高并发下的重复提交问题

高并发下的重复提交问题

时间:2023-08-29 17:32:47浏览次数:34  
标签:标志 缓存 订单 重复 数据库 用户 并发 扣款 提交


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

 

解决方案:

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

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

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

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

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

6、使用事务的隔离级别

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

 

 

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

 

参考文章:

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

 

抢红包策略

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

 

标签:标志,缓存,订单,重复,数据库,用户,并发,扣款,提交
From: https://blog.51cto.com/u_16240770/7278631

相关文章

  • list集合去除重复对象
    对象重复是指对象里面的变量的值都相等,并不定是地址。list集合存储的类型是基础类型还比较好办,直接把list集合转换成set集合就会自动去除。 当set集合存储的是对象类型时,就需要在对象的实体类里面重写publicbooleanequals(Objectobj){}和publicinthashCode(){}两个方法......
  • Git提交信息规范
    1.背景Git是目前世界上最先进的分布式版本控制系统,在我们平时的项目开发中已经广泛使用。而当我们使用Git提交代码时,都需要写CommitMessage提交说明才能够正常提交。gitcommit-m"提交"然而,我们平时在编写提交说明时,通常会直接填写如"fix"或"bug"等不规范的说明,不规范......
  • 查询col1列重复值所在行
    df_test=pd.DataFrame({'col1':['A']*2+['B'],'col2':range(3)})#查询col1列重复值所在行df_test.col1.duplicated()#首次出现不算重复df_test.query("col1.duplicated()")#只能筛选出非首次出现的重复值所在行#方法一df_test.duplicated(sub......
  • Android并发编程高级面试题汇总(含详细解析 十二)
    Android并发编程高级面试题汇总最全最细面试题讲解持续更新中......
  • Spring Cloud与Docker高并发微服务架构设计实施---微服务监控中心
    在众多正在运行的微服务中,我们必须做到随时掌握每一个服务的运行情况及其健康状态,才能保证整个平台的稳定性和可靠性。使用Hystrix断路器仪表盘功能就可以创建一个监控中心,实现在线监控微服务的运行状态。(此处代码有待完善)首先,在项目的配置管理中心中增加依赖配置<dependencies......
  • 06 初识并发问题
    packageThreadDemo;//多个线程同时操作同一个对象,涉及到资源的独享与共享并发什么的//多个线程同时操作同一个对象,可能会出现问题:线程不安全,数据紊乱------>上锁//并发与同步//火车票例子publicclassTest06implementsRunnable{intticketNums=10;@Ov......
  • 【lc】459. 重复的子字符串
    链接:https://leetcode.cn/problems/repeated-substring-pattern/description/思路:这题其实挺有意思的,我一开始寻思按照字符读到一个dict里统计各个字符的个数,讲道理每个字符的个数是相同的才对。(我承认我傻了,忽略了aab这种情况)然后我就开始想,如果能行,那原串肯定是子串的n倍。......
  • 常见的并发网络服务程序设计方案
    文章目录一、最基本的并发网络服务:IO复用1、select模型2、poll模型3、epoll模型二、单线程Reactor三、Reactor+ThreadPool四、MultipleReactors(oneloopperthread)一、最基本的并发网络服务:IO复用目前常用的IO复用模型有三种:select,poll,epoll。1、select模型说的通俗一点就是......
  • 【muduo】常见的并发网络服务程序设计方案
    文章目录一、IO复用1、select模型2、poll模型3、epoll模型二、单线程Reactor三、Reactor+ThreadPool四、MultipleReactors(oneloopperthread)一、IO复用目前常用的IO复用模型有三种:select,poll,epoll。1、select模型说的通俗一点就是各个客户端连接的文件描述符也就是套接字,都......
  • vue3响应式数据重复
    记一次bug。。由于【甲方负责人】的表单是响应式的,然后直接添加到另一个响应式的数组里了,就会造成【更改表单内容,也会使数组里的值发生变化】解决方法1//添加到列表,做临时显示2constaddresponsible=()=>{3constnewResform={...resform};//添加数组之前创......