一 .什么是mysql连接池

场景:每秒同时有1000个并发,但是这个mysql同时只能处理400个连接,mysql会宕机。

解决方案:连接池,这个连接池建立了200个和mysql的连接,这1000个并发就有顺序的共享这连接池中的200个连接。这个连接池能够带来额外的性能提升,因为这个和mysql建立连接的这个过程消耗较大,使用连接池只需连接一次mysql。

连接池定义:永不断开,要求我们的这个程序是一个常驻内存的程序。数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。

二.小案例

查找用户表数据库最新注册的3个会员?

(1)小提示

show processlist #mysql查看连接数

(2)创建10个mysql连接示例代码

/**

* Created by PhpStorm.

* User: Luke

* Date: 2019/10/30

* Time: 14:12

*/

//编写mysql连接池,这个类只能被实例化一次(单例)

class MysqlConnectionPool

{

private static $instance;//单例对象

private $connection_num = 10;//连接数量

private $connection_obj = [];

//构造方法连接mysql,创建20mysql连接

private function __construct()

{

for($i=0;$iconnection_num;$i++){

$dsn = "mysql:host=127.0.0.1;dbnane=swoole";

$this->connection_obj[] = new Pdo($dsn,'root','rootmysql123');

}

}

private function __clone()

{

// TODO: Implement __clone() method.

}

public static function getInstance()

{

if(is_null(self::$instance)){

self::$instance = new self();

}

}

}

MysqlConnectionPool::getInstance();

//创建swool的http服务器对象

$serv = new swoole_http_server('0.0.0.0',8000);

//当浏览器链接点这个http服务器的时候,向浏览器发送helloworld

$serv->on('request', function($request,$response){

//$request包含这个请求的所有信息,比如参数

//$response包含返回给浏览器的所有信息,比如helloworld

//(2.3)向浏览器发送helloworld

$response->end("hello world");

});

//启动http服务器

$serv->start();

(3)效果

(4)完善mysql连接池

/**

* Created by PhpStorm.

* User: Luke

* Date: 2019/10/30

* Time: 14:12

*/

//编写mysql连接池,这个类只能被实例化一次(单例)

class MysqlConnectionPool

{

private static $instance;//单例对象

private $connection_num = 20;//连接数量

private $connection_obj = [];

private $avil_connection_num = 20;//可用连接

//构造方法连接mysql,创建20mysql连接

private function __construct()

{

for($i=0;$iconnection_num;$i++){

$dsn = "mysql:host=127.0.0.1;dbname=swoole";

$this->connection_obj[] = new Pdo($dsn,'root','rootmysql123');

}

}

private function __clone()

{

// TODO: Implement __clone() method.

}

public static function getInstance()

{

if(is_null(self::$instance)){

self::$instance = new self();

}

return self::$instance;

}

//执行sql操作

public function query($sql)

{

if($this->avil_connection_num==0){

throw new Exception("暂时没有可用的连接诶,请稍后");

}

//执行sql语句

$pdo = array_pop($this->connection_obj);

//可用连接数减1

$this->avil_connection_num --;

//使用从连接池中取出的mysql连接执行查询,并且把数据取成关联数组

$rows = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);

//把mysql连接放回连接池,可用连接数+1

array_push($this->connection_obj,$pdo);

$this->avil_connection_num ++;

return $rows;

}

}

//创建swool的http服务器对象

$serv = new swoole_http_server('0.0.0.0',8000);

//当浏览器链接点这个http服务器的时候,向浏览器发送helloworld

$serv->on('request', function($request,$response){

//$request包含这个请求的所有信息,比如参数

//$response包含返回给浏览器的所有信息,比如helloworld

//向浏览器发送helloworld

$stop = false;

while (!$stop){

try{

$sql = "SELECT * FROM user ORDER BY id DESC LIMIT 5";

$rows = MysqlConnectionPool::getInstance()->query($sql);

$response->end(json_encode($rows));

$stop = true;

}catch (Exception $e){

usleep(100000);

}

}

});

//启动http服务器

$serv->start();

swoole怎么做mysql连接池_Swoole4创建Mysql连接池相关推荐

  1. mysql内连接和外连接的区别_Swoole4创建Mysql连接池

    一 .什么是mysql连接池 场景:每秒同时有1000个并发,但是这个mysql同时只能处理400个连接,mysql会宕机. 解决方案:连接池,这个连接池建立了200个和mysql的连接,这1000个 ...

  2. maxvalue mysql自动分区_创建mysql表分区的方法

    创建 mysql 表分区的方法 我来给大家介绍一下 mysql 表分区创建与使用吧,希望对各位同学会有所帮助.表分区的测试使用,主要内容来自 于其他博客文章以及 mysql5.1 的参考手册. 表分区 ...

  3. linux创建网络连接,使用nmcli创建网络连接

    使用nmcli创建一个新的网络连接时,首先需要清楚几个概念: 设备即接口 连接是供设备使用的配置,其由一组设置组成. 同一个设备可能存在多个连接,但是一次只能有一个保持活动状态 在创建新的连接时,参数 ...

  4. mysql 日历表_如何创建mysql日历表

    本文主要向大家介绍了如何创建mysql日历表,通过具体的代码向大家展示,希望对大家学习mysql有所帮助. 首先我们先创建自己需要的日历表(先查询是否存在创建表):drop table if exis ...

  5. 计算机创建网络连接,小编教你电脑怎么创建宽带连接_电脑创建宽带连接的方法...

    电脑开机没有"宽带连接"就无法拨号上网,这要怎么办?出现此问题就无法正常使用网络,想必许多电脑小白都遇到过此问题吧,如果没有宽带连接的话,可以手动创建一个.为此,小编整理电脑创建宽 ...

  6. navicat mysql 计划任务_navicat创建MySql定时任务的方法详解

    navicat创建MySql 定时任务详解 事件(event)是MySQL在相应的时刻调用的过程式数据库对象.一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的" ...

  7. php 怎么生成本地连接地址,电脑如何创建本地连接?电脑创建本地连接的操作方法...

    近期好多用户想要在电脑系统中创建本地连接,但是要如何创建呢?网上搜索系统创建本地连接的方法内容比较少,有不少的用户想要创建本地连接但是又不知道方法,为此感到很郁闷,下面,小编就给大家介绍电脑创建本地连 ...

  8. 记一次网络波动导致druid连接池无法创建新连接的BUG

    背景 项目使用了阿里druid jdbc连接池.某天环境出现网络波动,持续20分钟后,网络恢复,单服务一直无法连接数据库.重启之后正常运行 druid 版本:1.1.21 项目配置 spring.da ...

  9. azure mysql数据库_Azure上创建MySql数据库服务

    推荐文章 要想知道每个数据库的大小的话,步骤如下:1.进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2.查询所有数据的大 ...

  10. win10计算机怎么连接网络,如何创建宽带连接_win10电脑宽带连接怎么创建 - 驱动管家...

    WIN10系统刚推出,很多人习惯了XP的操作方法,在WIN10却不知道怎么去创建一个宽带连接,所以今天小编就为大家介绍win10宽带连接设置方法,不会的朋友快快来看看吧! 方法/步骤 1.右击屏幕的开 ...

最新文章

  1. android imageview 的常用属性,android imageview scaletype属性
  2. 复杂多变场景下的Groovy脚本引擎实战
  3. Asp.net的加密解密技巧--[转载]
  4. 谷歌 chrome 浏览器开发者工具打不开的解决方法
  5. 华为定制版Linux镜像下载,华为OpenEuler体验系列(02)--定制支持NTFS的微型Linux启动盘...
  6. 手机版ziperello_Ziperello
  7. ITK:创建一个高斯分布
  8. 信息熵与信息增益的理解
  9. 单机单网卡最大tcp长连接数真的是65535吗?
  10. 如何在字符串中添加双引号?
  11. Django ModelChoiceField:过滤查询集并将默认值设置为对象
  12. C++ 多字节与宽字符串的相互转换
  13. electron sqlite3_Electron+React+Antd工程搭建
  14. prepareStatement的用法和解释
  15. 2021-08-15 Servlet Properties 读取资源
  16. Luogu1939 【模板】矩阵加速(数列)
  17. 【2021考研数学汤家凤高数辅导讲义】第四章 不定积分
  18. 2013-06-16 读书笔记 大前研一 《无国界的世界》
  19. python的分隔符_python分隔符
  20. stm32wb55 基于rtt的ble sample制作过程

热门文章

  1. 这首歌,竟然是AI生成的,太狠了...
  2. SparkStreaming 是火还是坑?
  3. 如何成为一名出色的架构师?
  4. Spring 最常用的 7 大类注解,女媛史上最强整理!
  5. 国庆假期程序员是这样给自己粉饰无限的逼格!
  6. 2017-2018-1 20155330 《信息安全系统设计基础》第3周学习总结
  7. 小程序之旅——第四站(模板框架)
  8. 弱逼发福利——BZOJ简易题解
  9. memcached罢工引发的血案-博客园评论超时问题处理过程
  10. 一个支持CGI的极简WebServer