一 .什么是mysql连接池

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

解决方案:连接池,这个连接池建立了200个和mysql的连接,这1000个并发就有顺序的共享这连接池中的200个连接。

这个连接池能够带来额外的性能提升,因为这个和mysql建立连接的这个过程消耗较大,使用连接池只需连接一次mysql。

连接池定义:永不断开,要求我们的这个程序是一个常驻内存的程序。数据库连接池(Connection pooling)是程序启

动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。

二.小案例

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

(1)小提示

show processlist #mysql查看连接数

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

<?php
/**
* 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连接池

<?php
/**
* 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();

来源:https://www.cnblogs.com/starluke/p/11770799.html

·END·

PHP开源社区进阶·提升·涨薪

mysql内连接和外连接的区别_Swoole4创建Mysql连接池相关推荐

  1. mysql内联和外链的区别

    1.内联:不可以连接空数据,否则返回null,外键必须相等的才可以链接出数据. 2.外链:可以链接空表,会返回不为空的表字段数据.

  2. 内网和外网的区别 连接不同设备上网

    原来一直很疑惑,关于内网和外网的区别,看了好多博客,也没解决疑惑,但是看了书的定义,感觉豁然开朗.区别如下: 若计算机直接连接Modern并实现拨号上网时,利用百度查询到的ip地址是当前计算机在Int ...

  3. 内网和外网的区别+tcp协议ip协议详解

    内网概念 即所说的局域网,比如学校的局域网,局域网内每台计算机的IP地址在本局域网内具有互异性,是不可重复的.但两个局域网内的内网IP可以有相同的. (连上WIFI,手机IP一般能在「设置」-「关于手 ...

  4. 前端开发需要知道内网和外网的区别

    内网和外网的区别 内网(局域网) VS 外网(互联网/公网) 注意点 内网概念 外网概念 内外网联系及区别 推荐阅读 Vue源码学习目录 连点成线 - 前端成长之路 你越是认真生活,你的生活就会越美好 ...

  5. html如何做本地链接,如何创建本地连接,小编教你电脑如何创建本地连接

    有些电脑小白朋友不小心把电脑的本地连接给删掉了,我们都知道电脑要想上网,本地连接都是必须的.在面对这种电脑的使用不加以注意,会在不经意间把电脑的本地连接从电脑里面删除了的情况,该怎么去创建本地连接?下 ...

  6. 内连接与外链接的区别

    我们要实习了,实习面试过了,但是由于考试原因经理让我在学校巩固一些SQL知识.于是我就开始了,做题之旅,一天做几个巩固一下,好久没做了,刚做就来问题了.外链接与内连接我居然不知道他们之间的原理(这个知 ...

  7. 球幕投影中内投球和外投球的区别

    随着互动投影技术在各类展厅中的普及,人们经常会看到有一种球形的互动投影表现形式.在听讲解员介绍时,有的展厅内别人会介绍这个是内投球,还有的展厅内有时会介绍是外投球.究竟内投球和外投球的区别是什么呢,左 ...

  8. 天翼云内网服务器映射端口,天翼云服务器创建对等连接(不同账户组内网)

    pc6a学习分享小白有2台不同账户下的天翼云服务器.现在的需求是组建内网.不走公网连接.这里需要用到的功能为虚拟私有云 – 对等连接.组建内网的好处是不消耗公网连接宽带,且内网为1000M宽带. 天翼 ...

  9. c语言外循环和内循环区别是什么意思,内循环和外循环的区别 内循环和外循环的正确使用方法...

    过完五一,天气要慢慢热起来了,汽车空调使用的季节又要来了,但是很多车主对汽车空调的内外循环使用还是有点傻傻分不清,今天汽车维修网小编就和大家简单的说一下内循环和外循环的 内循环和外循环标志 内循环和外 ...

最新文章

  1. 单片机can通信可以接多少个设备_51单片机的多机并行通信系统应用
  2. python def是什么意思-python中def是什么
  3. 浅入深谈:一道Python面试题,让我明白了殊途同归,却开始怀疑自己
  4. 生成指定大小的空文件
  5. 关于学计算机有什么用检讨书,旷计算机课检讨书
  6. 动态的给python添加进度条_python动态进度条的实现代码
  7. 如何用电脑快速制作gif动态图片
  8. ios获取设备的唯一标识mac address
  9. 解除主键锁_mysql 锁
  10. JXSL报错CannotOpenWorkbookException和Cannot load XLS transformer解决方案
  11. SQLyog的下载与安装
  12. 视易服务器查看硬盘状态,Linux服务器使用Smartmontools检测硬盘状况 | 厘米天空
  13. 查询iphone邮箱服务器,iPhone上的各种邮箱设置
  14. 升级版“绝悟”AI自带“军师”,解禁王者荣耀全英雄池
  15. 知乎python小项目_python项目知乎
  16. 计算机学院学生会招新宣传语,团学招新 | 计算机学院团委、学生会招新啦!(一)...
  17. 在迪士尼打工,不快乐吗?
  18. oracle wallet,Oracle Wallet的使用
  19. 2021.08.09【普及组】模拟赛C组比赛总结
  20. 三维叉乘怎么算_自然资源管理,三维GIS能做什么?

热门文章

  1. 苏宁数据中台架构实践(附ppt)
  2. 几张图帮你弄清楚什么是 RPC
  3. 美团金融一面,二面后端Java面试分享!
  4. 这7款实用windows软件,太让人惊喜了!
  5. 轻量级的项目管理工具-Leangoo
  6. Linux串口原理与编程
  7. 市场营销学python有用吗_1、熟悉Python编辑、开发和运行环境。
  8. go 怎么等待所有的协程完成_Go语言入门必知教程-协程
  9. docker安装redis提示没有日记写入权限_Docker 学习笔记(第六集:使用 Dockerfile 定制镜像)...
  10. 华南理工深度学习与神经网络期末考试_深度学习基础:单层神经网络之线性回归...