swoole怎么做mysql连接池_Swoole4创建Mysql连接池
一 .什么是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连接池相关推荐
- mysql内连接和外连接的区别_Swoole4创建Mysql连接池
一 .什么是mysql连接池 场景:每秒同时有1000个并发,但是这个mysql同时只能处理400个连接,mysql会宕机. 解决方案:连接池,这个连接池建立了200个和mysql的连接,这1000个 ...
- maxvalue mysql自动分区_创建mysql表分区的方法
创建 mysql 表分区的方法 我来给大家介绍一下 mysql 表分区创建与使用吧,希望对各位同学会有所帮助.表分区的测试使用,主要内容来自 于其他博客文章以及 mysql5.1 的参考手册. 表分区 ...
- linux创建网络连接,使用nmcli创建网络连接
使用nmcli创建一个新的网络连接时,首先需要清楚几个概念: 设备即接口 连接是供设备使用的配置,其由一组设置组成. 同一个设备可能存在多个连接,但是一次只能有一个保持活动状态 在创建新的连接时,参数 ...
- mysql 日历表_如何创建mysql日历表
本文主要向大家介绍了如何创建mysql日历表,通过具体的代码向大家展示,希望对大家学习mysql有所帮助. 首先我们先创建自己需要的日历表(先查询是否存在创建表):drop table if exis ...
- 计算机创建网络连接,小编教你电脑怎么创建宽带连接_电脑创建宽带连接的方法...
电脑开机没有"宽带连接"就无法拨号上网,这要怎么办?出现此问题就无法正常使用网络,想必许多电脑小白都遇到过此问题吧,如果没有宽带连接的话,可以手动创建一个.为此,小编整理电脑创建宽 ...
- navicat mysql 计划任务_navicat创建MySql定时任务的方法详解
navicat创建MySql 定时任务详解 事件(event)是MySQL在相应的时刻调用的过程式数据库对象.一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的" ...
- php 怎么生成本地连接地址,电脑如何创建本地连接?电脑创建本地连接的操作方法...
近期好多用户想要在电脑系统中创建本地连接,但是要如何创建呢?网上搜索系统创建本地连接的方法内容比较少,有不少的用户想要创建本地连接但是又不知道方法,为此感到很郁闷,下面,小编就给大家介绍电脑创建本地连 ...
- 记一次网络波动导致druid连接池无法创建新连接的BUG
背景 项目使用了阿里druid jdbc连接池.某天环境出现网络波动,持续20分钟后,网络恢复,单服务一直无法连接数据库.重启之后正常运行 druid 版本:1.1.21 项目配置 spring.da ...
- azure mysql数据库_Azure上创建MySql数据库服务
推荐文章 要想知道每个数据库的大小的话,步骤如下:1.进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2.查询所有数据的大 ...
- win10计算机怎么连接网络,如何创建宽带连接_win10电脑宽带连接怎么创建 - 驱动管家...
WIN10系统刚推出,很多人习惯了XP的操作方法,在WIN10却不知道怎么去创建一个宽带连接,所以今天小编就为大家介绍win10宽带连接设置方法,不会的朋友快快来看看吧! 方法/步骤 1.右击屏幕的开 ...
最新文章
- android imageview 的常用属性,android imageview scaletype属性
- 复杂多变场景下的Groovy脚本引擎实战
- Asp.net的加密解密技巧--[转载]
- 谷歌 chrome 浏览器开发者工具打不开的解决方法
- 华为定制版Linux镜像下载,华为OpenEuler体验系列(02)--定制支持NTFS的微型Linux启动盘...
- 手机版ziperello_Ziperello
- ITK:创建一个高斯分布
- 信息熵与信息增益的理解
- 单机单网卡最大tcp长连接数真的是65535吗?
- 如何在字符串中添加双引号?
- Django ModelChoiceField:过滤查询集并将默认值设置为对象
- C++ 多字节与宽字符串的相互转换
- electron sqlite3_Electron+React+Antd工程搭建
- prepareStatement的用法和解释
- 2021-08-15 Servlet Properties 读取资源
- Luogu1939 【模板】矩阵加速(数列)
- 【2021考研数学汤家凤高数辅导讲义】第四章 不定积分
- 2013-06-16 读书笔记 大前研一 《无国界的世界》
- python的分隔符_python分隔符
- stm32wb55 基于rtt的ble sample制作过程