true 2014-12-25 04:46 采纳率: 0%
浏览 27075

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

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

  • 写回答

6条回答 默认 最新

  • 娃都会打酱油了 2014-12-25 05:14
    关注

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

    评论
  • WorldMobile 2014-12-25 07:05
    关注

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

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

    评论
  • 踩姑凉的小蘑菇 2014-12-25 06:45
    关注

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

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

    评论
  • 拥抱开源 2014-12-25 17:21
    关注

    数据库中可以加行锁

    评论
  • 关注

    好像有点像我买飞机票

    下单立即就减数量

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

    评论
  • 傲雪星枫 2015-01-02 19:07
    关注

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

    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 为什么树莓派5b显示禁止连接
  • ¥20 流量太费!寻找便宜的app音视频SDK或平替方案。
  • ¥15 kubeasz部署遇到问题
  • ¥15 GUIDE to App Designer Migration Tool for MATLAB
  • ¥50 第三代非支配排序遗传算法(NSGA-Ⅲ)和多目标粒子群优化算法(MOPSO)的实现
  • ¥20 plant simulation与python com接口实时数据交互
  • ¥15 有关汽车的MC9S12XS128单片机实验
  • ¥15 求c语言动态链表相关课程有偿,或能将这块知识点讲明白
  • ¥15 FLKT界面刷新异常
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部