• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    thinkPHP框架乐观锁和悲观锁实例分析

    本文实例讲述了thinkPHP框架乐观锁和悲观锁。分享给大家供大家参考,具体如下:

    乐观锁:

    例子对于一个正在出售的火爆商品,同一个时间,同时有10个人同时发起了10个线程来购买,10个线程读取到数据库的库存有20件和version为9。

    那么乐观锁读取num数量和version版本两个字段,在更新的结果时候,我们就要更新条件where version=9这条语句,具体UPDATE goods SET num=num-1,version=version+1 WHERE version=9 and id=1,这样的话,如果其中一条执行成功后,数据库中version的值为10了,所以剩下的9个人线程都会失败了。

    $result = $this->mysqli->query("SELECT num,version FROM goods WHERE id=1 LIMIT 1");
    $row = $result->fetch_assoc();
    $num = intval($row['num']);
    $version = intval($row['version']);
    if($num > 0){
      usleep(100);
      $this->mysqli->begin_transaction();
      $this->mysqli->query("UPDATE goods SET num=num-1,version=version+1 WHERE version={$version} and id=1");
      $affected_rows = $this->mysqli->affected_rows;
      if($affected_rows == 1){
        $this->mysqli->query("INSERT INTO log(good_id) VALUES({$num})");
        $affected_rows = $this->mysqli->affected_rows;
        if($affected_rows == 1){
          $this->mysqli->commit();
          echo "success:".$num;
        }else{
          $this->mysqli->rollback();
          echo "fail1:".$num;
        }
      }else{
        $this->mysqli->rollback();
        echo "fail2:".$num;
      }
    }else{
      echo "fail3:".$num;
    }
    
    

    乐观锁缺点:

    乐观锁优点:

    悲观锁mysql代码:

    #主要对所在行进行for update
    select * from employee where id = 1 for update; 
    update employee set money = 0 + 1 where id = 1;
    
    

    参考链接:
    https://www.kancloud.cn/mikkle/thinkphp5_study/359349

    更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

    希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • easyswoole一键安装脚本及宝塔安装错误问题
    • thinkphp框架类库扩展操作示例
    • PHP框架实现WebSocket在线聊天通讯系统
    • 浅谈laravel框架与thinkPHP框架的区别
    • PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
    • 自制PHP框架之设计模式
    • 自制PHP框架之模型与数据库
    • 自制PHP框架之路由与控制器
    • 详解PHP框架EasySwoole
    上一篇:PHP的HTTP客户端Guzzle简单使用方法分析
    下一篇:PHP简单实现图片格式转换(jpg转png,gif转png等)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    thinkPHP框架乐观锁和悲观锁实例分析 thinkPHP,框架,乐观,锁,和,