php培训视频百度云盘(php进阶到架构之swoole系列教程(三)mysql连接池)

wufei123 发布于 2024-09-09 阅读(13)

目录概述学习目标mysql连接池应用场景连接池定义查看当前mysql连接数创建连接池代码示例swoole中使用连接池对象php7进阶到架构师相关阅读概述这是关于php进阶到架构之swoole系列学习课程:第三节:mysql连接池

学习目标:了解什么是mysql连接池,以及mysql使用场景能在实际工作使用连接池(数据库连接池,redis连接池等等)解决高并发带来的问题mysql连接池应用场景场景:每秒同时1000个并发,但mysql数据库同时只支持400个连接,这样mysql就会宕机。

解决方案:使用连接池,这个连接池建立了300个与mysql的连接对象,这1000个并发有序地共享连接池里的300个连接连接池的使用不但解决了mysql在高并发情况下宕机问题,还额外提高了性能因为和mysql建立连接,消耗较大。

使用连接池只需要连接一次mysql连接池定义永不断开,需要程序常驻内存,这就需要借助swoole实现数据库连接池是程序启动时,建立足够的数据库连接,并将这些连接组成一个连接由程序动态的对连接池中的连接进行申请,使用,释放和回补。

查看当前mysql连接数showprocesslist创建连接池代码示例/** * MYSQL连接池,这个类只能被实例化一次(单例模式) * Class MysqlConnectionPool */

classMysqlConnectionPool{ /** * 单例对象 * @var MysqlConnectionPool */privatestatic $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; $iconnNum; $i++){ $dsn = "mysql:host=127.0.0.1;dbname=test"

; $this->connObjList[] = new Pdo($dsn,root,123456); } } privatefunction__clone

(){ } /** * 获取连接池对象,单例 * @return MysqlConnectionPool */publicstaticfunctiongetInstance

(){ if(is_null(self::$instance)){ self::$instance = newself(); }

returnself::$instance; } //执行sql操作publicfunctionquery($sql){ if($this->avilaConnNum <

1){ thrownewException("暂时没有可用的连接诶,请稍后"); } //从连接池获取一个连接对象,并删除(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^)\\\~~~

亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。