• 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 appindexmodel;

    use thinkModel;

    use thinkDb;

    /**

     * 使用静态方法 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直接测试一次,

  • 相关阅读:
    第一次结对编程作业
    第一次个人编程作业
    软工实践作业(一)
    通往SDN之路:可编程网络的思想史
    week9:Security: Web Security
    week8:Security: Encrypting and Signing
    week7:Technology: Application Protocols
    week6:Technology: Transport Control Protocol (TCP)
    10.消除左递归
    9.DFA最小化,语法分析初步
  • 原文地址:https://www.cnblogs.com/fuyifan/p/11736784.html
Copyright © 2020-2023  润新知