javaweb-怎么防止多用户同一时间抢购同一商品,防止高并发同时下单同一商品,大牛们献出你们所积累的知识吧?请教

问题描述

怎么防止多用户同一时间抢购同一商品,防止高并发同时下单同一商品,大牛们献出你们所积累的知识吧?请教

最近在做抢购系统,但头疼的是,在多用户高并发的情况下经常会库存出现问题。排查到,在同一时间内多用户同时下单导致查询和插入不同步了,而查询中跟插入又有时间差而在高并发的情况下导致库存问题(我的项目大概是这样,首先 for update查出商品信息表,放入全局表里数组里,当用户扣款余额成功后,update商品信息表减去该用户下单的数量。数据库用的mysql,查询商品信息表的时候是加锁过的,但商品信息表数据越来越多的时候查询有时间差,导致高并发的时候在查询商品信息表放进变量数组里的时候,在执行后面的时间差里,其他用户也在下单,导致库存有问题)。现在提问,同一时间内同一个商品防止多用户抢购,也就是说同一秒内在高并发的情况下只能被一个用户下单,目前的思路是排队,阻塞队列。但具体实现思路是怎样或者大牛们是否有更好的方法,且实现思路是怎样,有案例的话最好。实现语言是PHP。请教各位大牛决解方案

解决方案

update table set num=num-1 where num>1
不查直接更新,更新成功代表抢到了

解决方案二:

问题1,你可以使用第三放解决重复提交问题,如Struts2的解决方案http://www.cnblogs.com/suxiaolei/archive/2011/11/03/2234408.html,也可以用类似Nignx来处理

问题2.这个一个数据库锁问题。也就是做抢购时,每一个用户对商品下单订单时做商品锁锁对。。。就可以防止多用户同时抢到相同商品的问题

解决方案三:

把抢购系统放成两步,第一步为下单(即抢购),下单成功立即减少数量,更新表数据,
第二部为付款,后台写个程序,如果半个小时不付款,自动删除订单,然后增加数量。

这样的话,可以避过并发了,如果一步走,时间再短也会有并发的问题

解决方案四:

数据库中可以加行锁

解决方案五:

好像有点像我买飞机票

下单立即就减数量

半小时不付款则取消订单 数量恢复

解决方案六:

可以使用队列+锁表来做。

时间: 2024-10-29 14:28:47

javaweb-怎么防止多用户同一时间抢购同一商品,防止高并发同时下单同一商品,大牛们献出你们所积累的知识吧?请教的相关文章

高并发 抢购 超发-javaweb系统实现抢购功能,使起支持高并发,并且不出现超发的现象

问题描述 javaweb系统实现抢购功能,使起支持高并发,并且不出现超发的现象 使用javaWeb来实现一个抢购的功能,例如抢购某一个商品,现在我的解决方案是使用synchronized关键字,不过这种实现方式太挫了,请求大了之后服务直接挂掉. 各位大神都是如何实现 抢购功能的,使其 支持高并发,并且 不回出现超发(库存只剩一个,最后好几个人都抢到)的现象 解决方案 大部分抢购都是用缓存实现的,卖出一个将缓存里的库存数-1,直到为0 解决方案二: 你这不算什么高并发,这种进程内的同步对于分布式多

如何解决高并发的抢购问题

问题描述 如何解决高并发的抢购问题 前几天去南京付融宝面试,提了这样一个问题:在某天的上午10点有这样一个抢购活动,抢购的商品数量1000,初步估计那个时间点抢购的人数在100万左右,如何处理这样的一个问题. 解决方案 首先,你要有足够的服务器,保持前端页面能够正常调用.你可以用内容分发网络(cdn)使得前端应用层可以工作.然后,你可以产生一个随机数,以大约0.01的概率从前端服务器将订购请求发送到你的业务层,其余直接返回售罄.此时你的业务层已经只有1万的并发了,用事务队列保证抢购和存货的匹配.

java抢购功能问题,大并发情况下spring-mvc如何处理

问题描述 java抢购功能问题,大并发情况下spring-mvc如何处理 由spring托管的controller是单例的,正常情况下大并发访问同一接口,应该是会出现并发问题的,现在公司有一个抢购功能需要实现,数据库中有一个字段保存了当前商品剩余量,每次请求如果成功会将这个剩余量减1,多并发的情况会不会将这个值扣减为负数,请问这块功能应该从哪几个维度去考虑,如果不使用异步处理,在保证效率的前提下该如何解决并发问题 解决方案 数据库本身就可以控制,比如SQL Server两句语句就可以搞定 UPD

c++-ACM编程题,找出敏感词串,并删除,要求时间和空间效率很高,我写的程序通不过,

问题描述 ACM编程题,找出敏感词串,并删除,要求时间和空间效率很高,我写的程序通不过, Censorfrog is now a editor to censor so-called sensitive words (敏感词). She has a long text p. Her job is relatively simple -- just to find the first occurence of sensitive word w and remove it. frog repeats

java-web系统再次登录反应时间过长。

问题描述 web系统再次登录反应时间过长. 正在做的一个项目,部署在tomcat上用的是spring+jqueryeasyui,重启第一次登录的 时候没有问题很快,但是如果长时间保留在登录页面再次登录的时候就反应很慢,需要点击二次或者多次才能登录上. 解决方案 1.出现这种情况应该是你的服务器上连接已经超时了,而客户端没有超时 2.可以将服务器的超时时间配置成非常大的一个数看看是否可以解决问题.

DDD实践问题之 - 关于论坛的帖子回复统计信息的更新的思考

之前,在用ENode开发forum案例时,遇到了关于如何实现论坛帖子的回复的统计信息如何更新的问题.后来找到了自己认为比较合理的解决方案,分享给大家.也希望能和大家交流,擦出更多的火花. 论坛核心领域问题分析 论坛领域的核心概念是:帖子.回复.大家都知道,一个帖子可以有零个或多个回复.对同一个帖子,不同的人可以并行发表回复.回复发表后,查看帖子详情时,可以根据回复的发表时间排序显示:此外,我们还关心某个帖子的最新发表的回复.最新回复的作者.最新回复时间,以及总回复数. 我们设计的系统,应该在实现

写给Java老司机的Scala教程——Scala Fast Track

引子 如果说有什么编程语言让我觉得收获颇大的话,我想除了 Java 那么另一个就是 Scala,Java 教会了我工程和严谨,而 Scala 则进一步的给了我耳目一新的思维模式,并提高了我对OOP的认识,反过来,Scala的习得,也让我成为了一个更好的Java程序员. 背景 我写这个系列教程,除了分享我自己学习Scala的一些心得体会之外,并不是要特别的安利大家Scala.而我其实比较愚钝,所以我学习Scala 的时候走了不少弯路,记得当时还是 Scala 2.10,然后各种学习资料不是特别完善

如何解决PHP中的uniqid在高并发下的重复问题

最近项目中有用到生成token校验的问题.首先考虑用php中的uniqid()函数生成随机串,但是由于该函数好似基于微秒时间级别的.在高并发的情况下,就有可能会生成相同的值. 解决方案1:uniqid(rand(1,10000)), 该函数的第一个参数可用作生成数的前缀,如此,大大降低了生成数的重复率.但是重复的可能性还是存在的 解决方案2:md5(uniqid()),  使用md5()函数,可生成绝对唯一的值 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://w

系统架构-性能篇章1(应用系统性能1)

  在前面的文章中,说了很多JVM和数据库方面的东西,我所描述的内容大多偏重于技术本身,和实际的业务系统结合的比较少,本文开始进入实际的系统设计中应当注意的方方面面(文章偏重于访问量高,但是每次访问量并不是很大的系统),而偏重点在于性能和效率本身,由于这个知识涉及的基础和面很广,所以建议是先看下以前写的内容或自己有一定的基础来才开始接触比较好,另外本文也不能诠释性能的关键,从一个应用系统前端到后端涉及的部分非常多,本文也只会说明其中一部分,后续的部分我们再继续说:下面我们想一下一个web应用绝大