首页 » Web前端 » 地址池PHP技巧_php进阶到架构之swoole系列教程三mysql连接池

地址池PHP技巧_php进阶到架构之swoole系列教程三mysql连接池

访客 2024-12-09 0

扫一扫用手机浏览

文章目录 [+]

学习目标:

理解什么是mysql连接池,以及mysql利用场景。
能在实际事情利用连接池(数据库连接池,redis连接池等等)办理高并发带来的问题。

地址池PHP技巧_php进阶到架构之swoole系列教程三mysql连接池

mysql连接池运用处景

场景:

地址池PHP技巧_php进阶到架构之swoole系列教程三mysql连接池
(图片来自网络侵删)

每秒同时1000个并发,但mysql数据库同时只支持400个连接,这样mysql就会宕机办理方案:

利用连接池,这个连接池建立了300个与mysql的连接工具,这1000个并发有序地共享连接池里的300个连接。

连接池的利用不但办理了mysql在高并发情形下宕机问题,还额外提高了性能。
由于和mysql建立连接,花费较大。
利用连接池只须要连接一次mysql。

连接池定义

永不断开,须要程序常驻内存,这就须要借助swoole实现。

数据库连接池是程序启动时,建立足够的数据库连接,并将这些连接组成一个连接。
由程序动态的对连接池中的连接进行申请,利用,开释和回补。

查看当前mysql连接数

show processlist创建连接池代码示例

/ MYSQL连接池,这个类只能被实例化一次(单例模式) Class MysqlConnectionPool /class MysqlConnectionPool{ / 单例工具 @var MysqlConnectionPool / private static $instance; / 连接池连接数量 @var int / private $connNum = 20; / 连接工具列表,即连接池工具列表 @var array / private $connObjList = []; / 可用连接数 @var int / private $avilaConnNum = 20; / 布局方法连接mysql,创建20mysql连接 MysqlConnectionPool constructor. / private function __construct() { for($i=0; $i<$this->connNum; $i++){ $dsn = "mysql:host=127.0.0.1;dbname=test"; $this->connObjList[] = new Pdo($dsn,'root','123456'); } } private function __clone() { } / 获取连接池工具,单例 @return MysqlConnectionPool / public static function getInstance() { if(is_null(self::$instance)){ self::$instance = new self(); } return self::$instance; } //实行sql操作 public function query($sql) { if($this->avilaConnNum < 1){ throw new Exception("暂时没有可用的连接诶,请稍后"); } //从连接池获取一个连接工具,并删除(array_pop) $pdo = array_pop($this->connObjList); //可用连接数减1 $this->avilaConnNum --; //利用从连接池中取出的mysql连接实行查询,并且把数据取成关联数组 $rows = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC); //把mysql连接放回连接池,可用连接数+1 array_push($this->connObjList,$pdo); $this->avilaConnNum ++; return $rows; }}swoole中利用连接池工具

/创建swoole的http做事器工具$serv = new swoole_http_server('0.0.0.0',8080);//当浏览器链接点这个http做事器的时候,向浏览器发送helloworld$serv->on('request', function($request,$response){ $sql = "SELECT xxx";//实际查询的sql语句 $rows = MysqlConnectionPool::getInstance()->query($sql); $response->end(json_encode($rows));});//启动http做事器$serv->start();php7进阶到架构师干系阅读

https://www.kancloud.cn/gofor/gofor

末了,欢迎大家留言补充,谈论~~~喜好小编的话,欢迎点赞、收藏和关注哦~~~///(^v^)\\\~~~
标签:

相关文章