mysql处理高并发的方式比较多,以下为比较简单的一种(mysql事物控制)

beginTranse();

try{

$result = $dbca->query('select amount from s_store where postID = 12345');

if(result->amount > 0){

//quantity为请求减掉的库存数量

$dbca->query('update s_store set amount = amount - quantity where postID = 12345');

}

}catch($e Exception){

rollBack('');

}

commit();

// 咋一看此方法貌似没有问题,但如果仔细看会发现这个方法是不可取的

// 比如你购买商品的数量是大于1的此时如果库存只剩下1 执行库存就会出现负数的情况

// 就算是商品库存大于1 当有大量的请求挤进事物时会产生一个共享锁,所以在select的时候查询出来的结果都是满足条件的

// 这个时候update更新语句会把并发串行化,也就是给同时到达这里的update语句排个序,

// 一个一个执行,并生成排他锁,在当前这个update语句commit之前,其他用户等待执行,commit后,生成新的版本;这样执行完后,库存肯定为负数了。

// 所有我们需要一个小小的改动:

beginTranse();

try{

//quantity为请求减掉的库存数量,先减去库存

$dbca->query('update s_store set amount = amount - quantity where postID = 12345');

$result = $dbca->query('select amount from s_store where postID = 12345');

if(result->amount < 0){

throw new Exception('库存不足');

}

}catch($e Exception){

rollBack(回滚)

}

commit(提交事务)

简化后:

beginTranse(开启事务)

try{

//quantity为请求减掉的库存数量

$dbca->query('update s_store set amount = amount - quantity where amount>=quantity and postID = 12345');

}catch($e Exception){

rollBack();

}

commit();

库存出现负数 mysql_MySQL处理高并发,防止库存超卖库存出现负数相关推荐

  1. 秒杀系统设计4要素:硬抗高并发,拒绝超卖,避免少卖,打击黄牛

    双十一又要到了,牛牛有点慌,以前一个人的时候,一分钱都不花,现在有了女票,不仅得剁手,还得帮忙抢各种秒杀商品. 今年,牛牛真的不想再去抢秒杀了,为什么呢? 太难了,成千上万的人就盯着秒杀放出来的那点商 ...

  2. 使用Redis分布式锁处理并发,解决超卖问题

    使用Redis分布式锁处理并发,解决超卖问题 参考文章: (1)使用Redis分布式锁处理并发,解决超卖问题 (2)https://www.cnblogs.com/VitoYi/p/8726070.h ...

  3. 抢票或商品订单防并发、防超卖

    分享一下自己项目开发过程中的设计方案,涉及到订单防并发.防超卖的需求,兼容类似抢票,订单需要锁定商品序号,付款后成交,超时或取消后需要将序号放回可以重新下单的需求. 目录 函数整体思路 代码实现 优化 ...

  4. Mysql在高并发情况下,防止库存超卖而小于0的解决方案

    背景: 本人上次做申领campaign的PHP后台时,因为项目上线后某些时段同时申领的人过多,导致一些专柜的存货为负数(<0),还好并发量不是特别大,只存在于小部分专柜而且一般都是-1的状况,没 ...

  5. MySql(15)——Mysql在高并发情况下,防止库存超卖而小于0的解决方案

    本人上次做申领campaign的PHP后台时,因为项目上线后某些时段同时申领的人过多,导致一些专柜的存货为负数(<0),还好并发量不是特别大,只存在于小部分专柜而且一般都是-1的状况,没有造成特 ...

  6. Redis高并发场景下秒杀超卖解决

    目录 1 什么是秒杀 2 为什么要防止超卖 3 单体架构常规秒杀 3.1 常规减库存代码 3.2 模拟高并发 3.3 超卖现象 3.4 分析原因 4 简单实现悲观乐观锁解决单体架构超卖 4.1 悲观锁 ...

  7. 高并发场景的几种处理方法

    作为后端开发,高并发场景是一个绕不过去的坎,今天就来整理下常见的几种思路(暂时不考虑分布式的情况) 一.并发锁 首先我们要知道高并发下会出现某一个时刻流量猛增,还有就是如果是抢购之类的库存类并发可能会 ...

  8. 高并发超卖问题简要解决方案

    1.传统通过数据库保证不超卖 事务+行锁并不是解决超卖的方案,只是保障数据的统一性.传统通过回滚事务的方式防止某些用户多卖的情况. 采用新建一个防重表+事务的方式防止超卖.同一事务中,采用如 用户ID ...

  9. php redis高并发秒杀超卖解决测试

    <?php $redis = new Redis(); $redis->connect("0.0.0.0","6379"); // @$redis- ...

最新文章

  1. swift_018(Swift 的结构体)
  2. 撬开骁龙8一看,满满都是顶会论文
  3. wince下sources\sources.cmn\Makefile.def的相关作用
  4. stateflow中终止节点小记
  5. 【每日一题】7月20日题目精讲—着色方案
  6. 先来先服务算法的特点
  7. linux终端常用快捷键
  8. scala学习-scala中的特殊符号使用
  9. wrapper在python中_virtualenvwrapper如何在python中安装虚拟环境?
  10. 大数据分析的价值有哪些
  11. java滥用接口_接口滥用问题
  12. C语言学习笔记-1(资料:郝斌老师C语言视频)
  13. Cesium加载GeoJson数据
  14. veu中点击商品详情打开新窗口
  15. UINO优锘:产品实施“八步法”让客户感受DCV实施的专业性
  16. 三维可视化技术在智慧电厂中的作用
  17. 2. evaluate-reverse-polish-notation
  18. Machine Learning笔记——逻辑回归算法
  19. 赚钱套路分享:降维打击,报团取暖的玩法
  20. Word教程-给10以上的数字加个圈圈!

热门文章

  1. JavaScript中的闭包原理
  2. 【Anaconda3】anaconda的下载与安装
  3. 计算机技术在医学应用中的论文,浅论计算机技术在医学中的应用.pdf
  4. spicy.parser
  5. {转}C#使用微软语言包来获取中文汉字的拼音、拼音首字母、中文繁体
  6. 如何给自己的网站接入谷歌联盟
  7. 代理连接FTP实现上传和下载功能
  8. CSS样式中内联、嵌入、外部样式
  9. Pattern与Matcher
  10. Python使用Turtle画帕劳共和国国旗