加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP借助Mysql锁解决高并发的方法

发布时间:2022-06-30 15:19:46 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了PHP利用Mysql锁解决高并发的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧。 前面写过利用文件锁来处理高并发的问题的,现在我们说另外一个处理方式,利用Mysql的锁来解决高并发的问题,先看没有利
  这篇文章主要介绍了PHP利用Mysql锁解决高并发的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧。
 
  前面写过利用文件锁来处理高并发的问题的,现在我们说另外一个处理方式,利用Mysql的锁来解决高并发的问题,先看没有利用事务的时候并发的后果。
 
  创建库存管理表
 
  CREATE TABLE `storage` (
   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
   `number` int(11) DEFAULT NULL,
   PRIMARY KEY (`id`)
  ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
  创建订单管理表
    
  if($number>0)
  {
    $sql ="insert into `order` VALUES (null,$number)";
      
    $order_id = $pdo->query($sql);
    if($order_id)
    {
   
      $sql="update storage set `number`=`number`-1 WHERE id=1";
      $pdo->query($sql);
    }
  }
  我们预置库存是十个,然后执行ab测试查看结果
 
  mysql> select * from storage
    -> ;
  +----+--------+
  | id | number |
  +----+--------+
  | 1 |   -2 |
  +----+--------+
  1 row in set (0.00 sec)
   
  mysql> select * from `order`;
  +----+--------+
  | id | number |
  +----+--------+
  | 22 |   10 |
   if($number>0)
  {
    $sql ="insert into `order` VALUES (null,$number)";
   
    $order_id = $pdo->query($sql);
    if($order_id)
    {
   
      $sql="update storage set `number`=`number`-1 WHERE id=1";
      if($pdo->query($sql))
      {
        $pdo->commit();//提交事务
      }
      else
      {
        $pdo->rollBack();//回滚
      }
   
    }
    else
    {
      $pdo->rollBack();//回滚
    }
  }
  查看结果
   | 7 |   4 |
  | 8 |   3 |
  | 9 |   2 |
  | 10 |   1 |
  +----+--------+
  10 rows in set (0.00 sec)
  很明显在利用了mysql锁之后,对库存进行了有效的控制,很好的解决了第一段代码里面,因为并发引起的一些逻辑性的问题。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读