Close

基于SWOOLE的MYSQL数据库连接池,php mysql 连接池

swoole_mysqlpool

使用Swoole的\Swoole\Coroutine\MySQL创建连接,通过静态类和静态成员属性维护连接池,不同协程可以共享该连接池。

排队机制(先进先出)使用协程的特殊功能实现:

\Swoole\Coroutine::resume($name):从$name队列中恢复一个挂起的协程执行; \Swoole\Coroutine::suspend($name):将当前协程挂起到$name队列上。 限制 每个worker都有各自的MySQL连接池,且不同worker之间无法共享彼此的MySQL连接池; 可能存在各个worker进程连接池利用率不同(依赖业务实现)。 优点 与独立的连接池(worker进程间可共享的连接池实现)对比,无进程间通信开销; 独立的连接池需要增加运维成本。

使用方法

  • 运行MysqlServer.php
  • 更改测试代码数据库连接信息
  • 运行test.php测试

GITHUB地址 

3 thoughts on “基于SWOOLE的MYSQL数据库连接池,php mysql 连接池

  1. 虽然是静态属性维护的连接池,但是receiver里面是通过每个work进程去执行的;但是进程之间是不能共享静态属性的变量的呀,你这个应该还是独立的连接池吧。。。;求指点回复

    1. 在启动时会进行连接数在worker进程中水平拆分,比如现在设置的启动100 个连接数 ,现在有4个work 就会拆分成每个work生成100/4 个连接数,max以及space 同理,经过返回测试改良这个方案没出现连接泄露的现象 所以推荐是连接数设置最好为work的倍数。

    2. 刚才说的是SMProxy连接池原理,不好意思没仔细看 你说的这一个连接池目前是1个worker进程运行才能保障连接数的正确性的所以总的连接数等于设置的连接数*work数

Leave a Reply

Your email address will not be published. Required fields are marked *