1. <?php
  2.  
  3. $begin = time();
  4.  
  5. //同步请求
  6. function multi_sync(){
  7. $host = '192.168.2.87';
  8. $user = 'census';
  9. $password = 'census';
  10. $database = 'census';
  11. $mysqli = new mysqli($host, $user, $password, $database);
  12.  
  13. $query = "SELECT sleep(1);" ;
  14. $query .= "SELECT sleep(1);" ;
  15.  
  16. if ( $mysqli -> multi_query ( $query )) {
  17. do {
  18. echo "multi_sync_query \n";
  19. if ( $result = $mysqli -> store_result ()) {
  20. $ret = $result->fetch_array(MYSQLI_ASSOC);
  21. var_dump($ret);
  22. }
  23. // if ( $mysqli -> more_results ()) {
  24. // printf ( "-----------------\n" );
  25. // }
  26. } while ( $mysqli -> more_results () && $mysqli -> next_result ());
  27. }
  28. }
  29. multi_sync();
  30.  
  31. //同步请求
  32. /*
  33. function sync(){
  34. $host = '192.168.2.87';
  35. $user = 'census';
  36. $password = 'census';
  37. $database = 'census';
  38. $db = new mysqli($host, $user, $password, $database);
  39. echo "sync_query 1\n";
  40. $statement1 = $db->query('select sleep(1)');
  41. $ret1 = $statement1->fetch_array(MYSQLI_ASSOC);
  42. echo "sync_query 2\n";
  43. $statement2 = $db->query('select sleep(1)');
  44. $ret2 = $statement2->fetch_array(MYSQLI_ASSOC);
  45. var_dump($ret1);
  46. var_dump($ret2);
  47. }
  48. sync();
  49. */
  50.  
  51. //携程异步---php携程,mysqlnd异步
  52. /*
  53. function f1(){
  54. $db = new db();
  55. $obj = $db->async_query('select sleep(1)');
  56. echo "f1 async_query \n";
  57. yield $obj;
  58. $row = $db->fetch();
  59. echo "f1 fetch\n";
  60. yield $row;
  61. }
  62.  
  63. function f2(){
  64. $db = new db();
  65. $obj = $db->async_query('select sleep(1)');
  66. echo "f2 async_query\n";
  67. yield $obj;
  68. $row = $db->fetch();
  69. echo "f2 fetch\n";
  70. yield $row;
  71. }
  72.  
  73. $gen1 = f1();
  74. $gen2 = f2();
  75.  
  76. $gen1->current();
  77. $gen2->current();
  78.  
  79. $gen1->next();
  80. $gen2->next();
  81.  
  82. $ret1 = $gen1->current();
  83. $ret2 = $gen2->current();
  84.  
  85. var_dump($ret1);
  86. var_dump($ret2);
  87. */
  88. echo time() - $begin;
  89.  
  90. class db{
  91. static $links;
  92. private $obj;
  93.  
  94. function getConn(){
  95. $host = '192.168.2.87';
  96. $user = 'census';
  97. $password = 'census';
  98. $database = 'census';
  99. $this->obj = new mysqli($host, $user, $password, $database);
  100. self::$links[spl_object_hash($this->obj)] = $this->obj;
  101. return self::$links[spl_object_hash($this->obj)];
  102. }
  103.  
  104. function async_query($sql){
  105. $link = $this->getConn();
  106. $link->query($sql, MYSQLI_ASYNC);
  107. return $link;
  108. }
  109.  
  110. function fetch(){
  111. //for($i = 1; $i <= 5; $i++){
  112. $read = $errors = $reject = self::$links;
  113. $re = mysqli_poll($read, $errors, $reject, 1);
  114. foreach($read as $obj){
  115. if($this->obj === $obj){
  116. $sql_result = $obj->reap_async_query();
  117. $sql_result_array = $sql_result->fetch_array(MYSQLI_ASSOC);//只有一行
  118. $sql_result->free();
  119. return $sql_result_array;
  120. }
  121. }
  122. //}
  123. }
  124. }

异步之后只要1秒,同步以及同步多请求,都是2秒

mysql的mysqli异步与php的携程的更多相关文章

  1. 开源实践 | 携程在OceanBase的探索与实践

    写在前面:选型考虑 携程于1999年创立,2016-2018年全面推进应用 MySQL 数据库,前期线上业务.前端技术等以 SQL Server 为主,后期数据库逐步从 SQL Server 转到开源 ...

  2. [转]向facebook学习,通过协程实现mysql查询的异步化

    FROM : 通过协程实现mysql查询的异步化 前言 最近学习了赵海平的演讲,了解到facebook的mysql查询可以进行异步化,从而提高性能.由于facebook实现的比较早,他们不得不对php ...

  3. Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比

    Swoole 协程 MySql 客户端与 异步回调 MySql 客户端的对比 为什么要对比这两种不同模式的客户端? 异步 MySQL 回调客户端是虽然在 Swoole 1.8.6 版本就已经发布了, ...

  4. PHP mysql与mysqli事务详解

    官方对PHP连接到MySQL数据库服务器的三种主要的API简介如下: http://php.net/manual/zh/mysqli.overview.php PHP mysql与mysqli事务详解 ...

  5. mysql、mysqli、PDO一句话概括比较

    mysql.mysqli.PDO一句话概括比较 1 mysql扩展 (注:原始的,较差) 2 mysqli扩展(面向过程式) (注:比上面多了更多功能) 3 mysqli扩展(面向对象式) (注:比上 ...

  6. centos 单独安装PHP的mysql和mysqli扩展

    2013年11月22日 11:25:41 Linux centos 6.3 最小化安装 mysql 5.5 php 5.4 安装PHP时只是 ./configure --prefix=/**** 并没 ...

  7. php Mysql 和Mysqli数据库函数整合

    PHP Mysql和Mysqli数据库函数整合 服务器如果支持mysqli函数将优先mysqli函数进行数据库操作 否则将调用mysql函数进行数据库操作 用法SQL::connect(host,us ...

  8. PHP数据库连接mysql与mysqli的区别与用法

    一.mysql与mysqli的概念相关: 1.mysql与mysqli都是php方面的函数集,与mysql数据库关联不大. 2.在php5版本之前,一般是用php的mysql函数去驱动mysql数据库 ...

  9. PHP中MySQL、MySQLi和PDO的用法和区别

    PHP的MySQL扩展(优缺点) 设计开发允许PHP应用与MySQL数据库交互的早期扩展.mysql扩展提供了一个面向过程 的接口: 并且是针对MySQL4.1.3或更早版本设计的.因此,这个扩展虽然 ...

随机推荐

  1. Qt_HelloWrold

    新建工程 -> 选择Qt Gui 应用 然后点击选择 在弹出的对话框中填写名称,创建路径等信息: 点击下一步,选择该工程的编译器. 点击下一步,可以选择生成的主窗口文件.不过这里我们仅仅用简单的 ...

  2. Leetcode--680. Valid Palindrome II(easy)

    Given a non-empty string s, you may delete at most one character. Judge whether you can make it a pa ...

  3. 水池问题的lua语言算法(面试题分析:我的Twitter技术面试失败了)

    twitter面试题内容 “看下面这个图片” “在这个图片里我们有不同高度的墙.这个图片由一个整数数组所代表,数组中每个数是墙的高度.上边的图可以表示为数组[2,5,1,2,3,4,7,7,6]” “ ...

  4. expect 安装使用

    expect 命令相当于crt远程连接,可用于脚本化实现多服务器巡检功能. 一.expect 命令安装: 1.rpm 文件下载:百度云链接:http://pan.baidu.com/s/1sl1wSU ...

  5. Linux分区之parted命令

      之前使用最多的分区命令无疑是fdisk了,大多数情况下fdisk可以满足日常工作上的需求,极个别情况就需要使用parted命令了,至于及个别情况就要从MBR和GPT说起. MBR主引导扇区   主 ...

  6. css伪元素:before和:after用法详解

    css的伪元素,之所以被称为伪元素,是因为他们不是真正的页面元素,html没有对应的元素,但是其所有用法和表现行为与真正的页面元素一样,可以对其使用诸如页面元素一样的css样式,表面上看上去貌似是页面 ...

  7. ViewPager无限滑动

    2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...

  8. JavaScript基础(3)-JS中的面向对象、定时器、BOM、位置信息

    一.创建对象的几种常用方式. 1.使用Object或对象字面量创建对象: a.使用Object()内置的构造函数来创建对象,例如: var student = new Object(); // 创建一 ...

  9. 面向对象多继承(c3算法)、网络基础和编写网络相关的程序

    一.面向对象多继承(c3算法) a.有多个父类先找左,再找右,如下示例: class A(object): pass class B(object): def f1(self): print('B') ...

  10. 大数据与Hadoop

    figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...