thinkphp5.1长连接-单例模式测试!
在控制器中 使用以下代码测试
for ($i = 0; $i < 1000; $i++) {
$tmp['name'] = 'f_'.$i;
$tmp['times'] = date('Y-m-d H:i:s');
//第一测试 不采用 持久连接 mysql max_connection = 500 本次数据插入
//500 条之后 提示 too many connecntios 错误
//第二次测试 TP 采集持久连接
db('task')->insert($tmp);
}
数据库配置文件中 database.php
// 数据库连接参数
'params' => [
\PDO::ATTR_PERSISTENT => true,
\PDO::ATTR_CASE => \PDO::CASE_LOWER,
],
// 是否需要断线重连
'break_reconnect' => true,
采用持久连接参数之后,确实没有报错,数据库中顺利插入了 1000条记录
但是查看日志文件,
[ 2019-10-25T09:53:48+08:00 ][ sql ] [ DB ] CONNECT:[ UseTime:0.000315s ] mysql:host=127.0.0.1;dbname=xun_php_cn;charset=utf8
[ 2019-10-25T09:53:48+08:00 ][ sql ] [ SQL ] INSERT INTO `op_task` (`name` , `times`) VALUES ('f_697' , '2019-10-25 09:53:48') [ RunTime:0.000604s ]
[ 2019-10-25T09:53:48+08:00 ][ sql ] [ DB ] CONNECT:[ UseTime:0.000292s ] mysql:host=127.0.0.1;dbname=xun_php_cn;charset=utf8
[ 2019-10-25T09:53:48+08:00 ][ sql ] [ SQL ] INSERT INTO `op_task` (`name` , `times`) VALUES ('f_698' , '2019-10-25 09:53:48') [ RunTime:0.000643s ]
发现还是每插入一条数据,就有一条CONNECT记录 , 不理解了。
下一步用单例模式 新建了一个模型类
<?php
namespace app\index\model;
use think\Model;
use think\Db;
/**
* 使用静态方法 static 而不是 public 在controller里面不用new 直接用 会方便很多
*/
class TaskModel extends Model
{
private static $instance;
protected $defaultField = 'danli';
private function __clone() {}
//禁止被克隆
/**
* 单例
*/
public static function getInstance() {
if (!(self::$instance instanceof self)) {
self::$instance = new static();
}
return self::$instance;
}
/**
* 添加一条数据
*/
public static function insertOne($uname,$times) {
$inserttheone = self::getInstance()->execute("insert into op_task(name,times) value('".$uname."','".$times."')");
if ($inserttheone) {
return true;
} else {
return false;
}
}
/**
* 删除一条数据
*/
public static function deleteOne($uid) {
$delone = self::getInstance()->execute("delete from op_task where id = ".$uid."");
if ($delone) {
return true;
} else {
return false;
}
}
}
for ($i = 0; $i < 1000; $i++) {
$tmp['name'] = 'f_'.$i;
$tmp['times'] = date('Y-m-d H:i:s');
$delOne = TaskModel::insertOne($tmp['name'],$tmp['times']);
}
采用单例模式测试,数据库顺利插入1000条记录,没有报too many connections 错误
[ 2019-10-25T10:02:30+08:00 ][ sql ] [ SQL ] insert into op_task(name,times) value('f_718','2019-10-25 10:02:30') [ RunTime:0.002179s ]
[ 2019-10-25T10:02:30+08:00 ][ sql ] [ SQL ] insert into op_task(name,times) value('f_719','2019-10-25 10:02:30') [ RunTime:0.000588s ]
日志文件,也没有看到 多次的 connect记录。。
从测试结果来看,单例模式,数据库没有多次连接。
当然这只是对于一个页面中的操作,单例模式有效果,这涉及到PHP的执行模式了,对于高并发还是需要长连接。
for ($i = 0; $i < 1000; $i++) {
$tmp['name'] = 'f_'.$i;
$tmp['times'] = date('Y-m-d H:i:s');
//第一测试 不采用 持久连接 mysql max_connection = 500 本次数据插入
//500 条之后 提示 too many connecntios 错误
//第二次测试 TP 采集持久连接
db('task')->insert($tmp);
//$delOne = TaskModel::insertOne($tmp['name'],$tmp['times']);
//usleep(1000000);
}
记录了插入 700条数据的时间
正常连接-2.964616s
持久连接-1.928009s
正常连接-单例模式-1.767899s
持久连接-单例模式-1.652180s
从测试结果来看,,,采用持久连接 单例模式 执行效率确实提高不少。。。这次的测试时在 swoole的 task中进行的。
等下在通过nginx TP5直接测试一次,
thinkphp5.1长连接-单例模式测试!的更多相关文章
- [NewLife.Net]单机400万长连接压力测试
目标 对网络库NewLife.Net进行单机百万级长连接测试,并持续收发数据,检测网络库稳定性. [2020年8月1日晚上22点] 先上源码:https://github.com/NewLifeX/N ...
- OpenResty 高阶实战之————Redis授权登录使用短连接(5000)和长连接(500W) 使用连接池AB压力测试结果
一.短连接开始测试 ab -n 5000 -c 100 -k 127.0.0.1/test_redis_short #demo1 Concurrency Level: Time taken for t ...
- HTTP的长连接和短连接——Node上的测试
本文主要从实践角度介绍长.短连接在TCP层面的表现,借助Node.JS搭建后台服务,使用WinHTTP.Ajax做客户端请求测试,最后简单涉及WebSocket. 关键字:长连接.短连 ...
- HTTP长连接、短连接使用及测试
概念 HTTP短连接(非持久连接)是指,客户端和服务端进行一次HTTP请求/响应之后,就关闭连接.所以,下一次的HTTP请求/响应操作就需要重新建立连接. HTTP长连接(持久连接)是指,客户端和服务 ...
- centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB 注意down掉网卡的方法 nginx效率没有LVS高 ipvsadm命令集 测试LVS方法 第三十三节课
centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB ...
- 异数OS TCP协议栈测试(三)--长连接篇
异数OS TCP协议栈测试(三)--长连接篇 本文来自异数OS社区 github: 异数OS-织梦师(消息中间件)群: 476260389 异数OS TCP长连接技术简介 说起长连接,则首先要谈对 ...
- telnet 测试网站是否开启长连接
测试服务器是否开启keepalive(长连接) telnet 主机名(域名|IP) 80 #发起请求GET /index.html HTTP/1.1Host: www.cbnsc.com 如果请求完后 ...
- HTTP的长连接和短连接
本文总结&分享网络编程中涉及的长连接.短连接概念. 关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规定了默认保持长连接(HTT ...
- C#中HttpClient使用注意:预热与长连接
最近在测试一个第三方API,准备集成在我们的网站应用中.API的调用使用的是.NET中的HttpClient,由于这个API会在关键业务中用到,对调用API的整体响应速度有严格要求,所以对HttpCl ...
随机推荐
- B-概率论-贝叶斯决策
目录 贝叶斯决策 一.贝叶斯决策理论 二.贝叶斯公式 2.1 从条件概率公式推导贝叶斯公式 2.2 从全概率公式推导贝叶斯公式 三.贝叶斯公式应用 更新.更全的<机器学习>的更新网站,更有 ...
- 从.NET CORE2.2升级到3.0过程及遇到的一些问题
RoadFlow工作流引擎从.NET Core2.2升级到3.0遇到了一些问题及解决方式这里记录一下. 1.DLL项目框架从2.2选择到3.0,这个没什么好说的,没有问题.重点的WEB层的一些变化. ...
- 面试官,Java8 JVM内存结构变了,永久代到元空间
在文章<JVM之内存结构详解>中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化.作为面试官如果你还不知道,那么面试过程中是不是有些露怯? ...
- 前端开发 JavaScript 干货知识点汇总
很多初学的朋友经常问我,前端JavaScript都需要学习哪些东西呀?哪些是JavaScript的重点知识啊? 其实做前端开发工程师,所有的知识点都是我们学习必备的东西,只有扎实的技术基础才是高薪的关 ...
- metasploit(MSF)渗透平台命令大全
转自互联网 记录以备后用 show exploits 列出metasploit框架中的所有渗透攻击模块. show payloads 列出metasploit框架中的所有攻击载荷. show auxi ...
- [Luogu1379]八数码难题
题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...
- 创建优化的Go镜像文件以及踩过的坑
在Docker上创建Go镜像文件并不困难,但建立的文件很大,接近1G,使用起来不太方便.Docker镜像的一个主要难题就是如何优化,创建小的镜像.我们可以用多级构建的方法来创建Docker镜像文件,它 ...
- 使用Prometheus监控SpringBoot应用
通过之前的文章我们使用Prometheus监控了应用服务器node_exporter,数据库mysqld_exporter,今天我们来监控一下你的应用.(本文以SpringBoot 2.1.9.REL ...
- Java代码优化建议
总结日常Java开发常见优化策略,持续更新. 尽可能使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快,其他变量,如静态变量.实例变量等,都在堆中创建,速度较慢.另外, ...
- 二叉树的查找(前序、中序、后序、层序遍历)--biaobiao88
建立一棵含有n个结点的二叉树,采用二叉链表存储: 输出前序.中序.后序..层序遍历该二叉树的遍历结果. 定义二叉树的数据类型——二叉树结点结构体BiNode.建立二叉链表可以采用扩展二叉树的一个遍历序 ...