Mysql协程连接池

demo中有封装好的mysql连接池,MysqlPool2.php,复制demo中的MysqlPool2.php并放入Application/Utility中即可使用

添加数据库配置

在Config中添加配置信息:

  1. 'MYSQL' => [
  2. 'HOST' => '127.0.0.1', // 数据库地址
  3. 'PORT' => 3306, // 数据库端口
  4. 'USER' => 'root', // 数据库用户名
  5. 'PASSWORD' => 'root', // 数据库密码
  6. 'DB_NAME' => 'db', // 数据库库名
  7. 'MIN' => 5, // 最小连接数
  8. 'MAX' => 100 // 最大连接数
  9. ]

并在Config的COROUTINE_POOL中新增该连接池

  1. 'POOL_MANAGER' => [
  2. 'App\Utility\MysqlPool2' => [
  3. 'min' => 5,
  4. 'max' => 100,
  5. 'type' => 1
  6. ]
  7. ]

注意

连接池不是跨进程的,也就是说一个进程有一个连接池,配置中的MAX为100,开了4个worker,最大连接数可能达到400。

使用

需要先use EasySwoole\Core\Swoole\Coroutine\PoolManager;,可以通过

  1. $pool = PoolManager::getInstance()->getPool('App\Utility\MysqlPool'); // 获取连接池对象
  2. $db = $pool->getObj();

获得对象。协程的ORM是从MysqliDb移植的,操作与MysqliDb一致。

连接池基本方法

getObj 从连接池中取得对象

  1. public function getObj($timeOut = 0.1) {}

timeOut指定超时时间(单位:秒),当连接池中没有对象时,将会进行等待,如果超时时间大于0,则最多等待该时间。

freeObj 释放对象

  1. public function freeObj($obj) {}

将对象释放,重新放回连接池中。

注意

使用完后,一定要记得freeObj。