php这串php计算代码执行时间为什么并发时有的会写不进去

问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
我们知道数据库处理sql是一条条处理的,假设购买商品的流程是这样的:
sql1:查询商品库存
if(库存数量 & 0)
//生成订单...
sql2:库存-1
当没有并发时,上面的流程看起来是如此完美,假设同时两个人下单,而库存只有1个了,在sql1阶段两个人查询到的库存都是&0的,于是最终都执行了sql2,库存最后变为-1,超售了,要么补库存,要么等用户投诉吧。解决这个问题比较好的方法是什么呢?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
处理高并发一般来说都会用到Redis,使用Redis的list数据结构(高并发当然要异步队列咯)来存储请求过来的订单信息,然后启用redis的事务机制(见:),加入指定key的list前,判断该list等长度是否超过redis中保存的指定商品库存值,如果超过则不操作,如果不超过,则进行插入,插入之后,再次判断该list的长度是否超过redis中保存的指定商品的库存值,如果超过则回滚,否则提交。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
用事务处理机制
数据表加锁也行(如果你用InnoDB引擎就用行锁;如果你用MyISAM引擎就用表锁)
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:2010年3月 PHP大版内专家分月排行榜第三2005年4月 PHP大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
我们知道数据库处理sql是一条条处理的,假设购买商品的流程是这样的:
sql1:查询商品库存
if(库存数量 & 0)
//生成订单...
sql2:库存-1
当没有并发时,上面的流程看起来是如此完美,假设同时两个人下单,而库存只有1个了,在sql1阶段两个人查询到的库存都是&0的,于是最终都执行了sql2,库存最后变为-1,超售了,要么补库存,要么等用户投诉吧。解决这个问题比较好的方法是什么呢?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
有种很笨的方法,已楼主的假设为例:
sql1:查询商品库存 (假设查出的库存为10)
if(10 & 0)
//生成订单...
sql2: 10 - 1 (此时库存为9了)
//再校验库存
sql3: 查询商品库存 == 9 (如果此时有并发情况,那查出来的库存可能为8、7等,这时抛出异常,事务回滚,该笔订单无效。)
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
用事务处理机制
数据表加锁也行(如果你用InnoDB引擎就用行锁;如果你用MyISAM引擎就用表锁)
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:紧急一段数据库处理并发的PHP代码 - PHP当前位置:& &&&紧急一段数据库处理并发的PHP代码紧急一段数据库处理并发的PHP代码&&网友分享于:&&浏览:19次紧急求救一段数据库处理并发的PHP代码一本书如如何防止两个人买到如下表book (id,name,num)
num是库存量比如 (1,&高级语言&,1) 这么一本书,在某一时刻多人点击购买,之让其中一人买到,买到之后修改 库存量用事务如何实现???刚接触php ,求其详!------解决方案--------------------需要用事务吗? 一切尽在你的掌控之中。
------解决方案--------------------代码是由你来写的。你想怎么控制就怎么控制啊。 你判断一下买的人是否是 “内定” 是就让其买,修改数据库库存量。否则不让买就行了。
------解决方案--------------------不需要考虑这个问题 数据库自动有锁功能,不会出现同时两个人修改数据表的事情。判断数量是否为0 为零不可再购买即可.修改数据库语句返回判断结果。
------解决方案--------------------UPDATE
table SET num=0 WHERE num&0 AND id=888;如果库存已经为0,这样的话 你觉得他会修改么?
------解决方案--------------------探讨引用:引用:UPDATE
table SET num=0 WHERE num&0 AND id=888;如果库存已经为0,这样的话 你觉得他会修改么?确实可以但是我用的事insert
------解决方案--------------------记录被谁买了请用另外一张表记录
------解决方案--------------------探讨引用:引用:引用:引用:UPDATE
table SET num=0 WHERE num&0 AND id=888;如果库存已经为0,这样的话 你觉得他会修改么?确实可以但是我用的事insert你……
------解决方案--------------------讨论真激烈~
------解决方案--------------------set autocommit = 0 ,insert ,update commit&
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 php动态倒计时代码 的文章

 

随机推荐