Home Backend Development PHP Tutorial Detailed explanation of the steps to implement mysql connection pool effect in php

Detailed explanation of the steps to implement mysql connection pool effect in php

May 19, 2018 pm 02:10 PM
mysql php step

This time I will bring you a detailed explanation of the steps to implement the mysql connection pool effect in php. What are the precautions for php to implement the mysql connection pool effect. The following is a practical case, let's take a look.

Loop to obtain connections from the mysql connection pool without repeatedly creating new connections.

Reference configuration modification: You can refer to the following article

Prevent the number of visits from being too large and filling up the number of connections

<?php
/**
 * @author xuleyan
 * @title mysql类
 */
class DbHelper{
  //连接池
  private $_pools = [];
  //连接池大小
  const POOLSIZE = 5;
  const USERNAME = "root";
  const PASSWORD = "root";
  const HOST = "127.0.0.1";
  const DB = "test";
  public function construct()  
  {
    $db = self::DB;
    $username = self::USERNAME;
    $password = self::PASSWORD;
    $host = self::HOST;
    //持久化连接
    $presistent = array(PDO::ATTR_PERSISTENT => true);
    for ($i=0; $i < self::POOLSIZE; $i++) { 
      $connection = new PDO("mysql:dbname=$db;host=$host", $username, $password);
      // sleep(3);
      array_push($this->_pools, $connection);
    }
  }
  //从数据库连接池中获取一个数据库链接资源
  public function getConnection()
  {
    echo 'get' . count($this->_pools) . "<br>";
    if (count($this->_pools) > 0) {
      $one = array_pop($this->_pools);
      echo 'getAfter' . count($this->_pools) . "<br>";
      return $one;
    } else {
      throw new ErrorException ( "<mark>数据库连接池中已无链接资源,请稍后重试!</mark>" );
    }
  }
  //将用完的数据库链接资源放回到数据库连接池
  public function release($conn)
  {
    echo 'release' . count($this->_pools) . "<br>";
    if (count($this->_pools) >= self::POOLSIZE) {
      throw new ErrorException ( "<mark>数据库连接池已满!</mark>" );
    } else {
      array_push($this->_pools, $conn);
      // $conn = null;
      echo 'releaseAfter' . count($this->_pools) . "<br>";
    }
  }
  public function query($sql)
  {
    try {
      $conn = $this->getConnection();
      $res = $conn->query($sql);
      $this->release($conn);
      return $res;
    } catch (ErrorException $e) {
      print 'error:' . $e->getMessage();
      die;
    }
  }
  public function queryAll($sql)
  {
    try {
      $conn = $this->getConnection();
      $sth = $conn->prepare($sql);
      $sth->execute();
      $result = $sth->fetchAll();
      return $result;
    } catch (PDOException $e) {
      print 'error:' . $e->getMessage();
      die;
    }
  }
}
Copy after login

Call this in another file

<?php 
require_once &#39;db.php&#39;;
$sql = &#39;select * from user&#39;;
$dbhelper = new DbHelper;
for ($i=0; $i < 10; $i++) { 
  $res = $dbhelper->query($sql);
  // var_dump($res) . PHP_EOL;
}
Copy after login

How to use the connection pool of ThinkPHP to connect to MySQL

Because of a small bug, the project sent a large number of connection requests to mysql one night, and at the same time, there was a problem with the dns of the mysql server. , causing the reverse solution to time out. Finally, the mysql server was dragged alive.

Finally the bug was fixed and we studied the method of increasing mysql connection pool.

After searching in the past two days, I found that there is no documentation related to connection pooling in the ThinkPHP documentation. So I studied the code myself.

First of all: There are three commonly used mysql extension libraries in PHP: mysql, mysqli, pdo_mysql.

* mysqli does not support connection pooling.
* pdo_mysql is supported, however, thinkPHP's pdo extension does not support mysql, only supports: 'MSSQL', 'ORACLE', 'Ibase', 'OCI'. (See line 59 of Pdo.class.php)

* mysql support, through the method: mysql_pconnect. (For specific parameters, please see the official php documentation)

1 The way to enable ThinkPHP to enable long connections is:

class BaseMysql extends Model {
  protected $connection = array(
    'db_type' => 'mysql',
    'db_user' => '***',
    'db_pwd' => '*******',
    'db_host' => '*******',
    'db_port' => '3306',
    'db_name' => 'custom',
    'db_params' => array('persist' => true),
  );
}
Copy after login

If you think that everything will be fine if you configure this, you are totally wrong.

2 mysql -> my.cnf Modify configuration:
[mysqld]

interactive_timeout =60 // Expiration time of interactive connection (mysql-client).
wait_timeout =30 //Expiration time of long connection. This must be changed! The default is 8 hours. If the request volume is large, the number of connections will be full soon.
max_connections = 100 //The maximum number of connections can be considered as the size of the connection pool

3 php.ini modification:
[MySql]
mysql.allow_persistent = On
mysql. max_persistent = 99 // Must be less than the maximum number of connections configured by mysql
mysql.max_links = 99

4 If the webserver is apache, keep-alive needs to be enabled. Otherwise, once the request exits, the long connection cannot be reused.
Webserver is the case of nginx:
pm = dynamic // Some sub-processes are started by default to handle http requests.
pm.max_children // Maximum number of child processes. This configuration should be smaller than mysql's max_connections.

5 If you find that it still cannot be used, please check whether the keepalive of the operating system is enabled.

Overview:

Keep-alive and database long connection need to be enabled at the same time, otherwise the long connection will occupy the number of mysql connection resources in vain and cannot be reused.
In the case of nginx php-fpm, the long connection between the php-fpm sub-process and mysql is actually maintained. Which php-fpm sub-process the front-end http request is assigned to, the sub-process will reuse its long connection with mysql.

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Recommended reading:

Detailed explanation of the steps of implementing multiple linear regression simulation curve algorithm in PHP

Access array elements in double quotes in php How to handle error reporting

The above is the detailed content of Detailed explanation of the steps to implement mysql connection pool effect in php. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP and Python: Different Paradigms Explained PHP and Python: Different Paradigms Explained Apr 18, 2025 am 12:26 AM

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

Choosing Between PHP and Python: A Guide Choosing Between PHP and Python: A Guide Apr 18, 2025 am 12:24 AM

PHP is suitable for web development and rapid prototyping, and Python is suitable for data science and machine learning. 1.PHP is used for dynamic web development, with simple syntax and suitable for rapid development. 2. Python has concise syntax, is suitable for multiple fields, and has a strong library ecosystem.

PHP and Python: A Deep Dive into Their History PHP and Python: A Deep Dive into Their History Apr 18, 2025 am 12:25 AM

PHP originated in 1994 and was developed by RasmusLerdorf. It was originally used to track website visitors and gradually evolved into a server-side scripting language and was widely used in web development. Python was developed by Guidovan Rossum in the late 1980s and was first released in 1991. It emphasizes code readability and simplicity, and is suitable for scientific computing, data analysis and other fields.

Laravel Introduction Example Laravel Introduction Example Apr 18, 2025 pm 12:45 PM

Laravel is a PHP framework for easy building of web applications. It provides a range of powerful features including: Installation: Install the Laravel CLI globally with Composer and create applications in the project directory. Routing: Define the relationship between the URL and the handler in routes/web.php. View: Create a view in resources/views to render the application's interface. Database Integration: Provides out-of-the-box integration with databases such as MySQL and uses migration to create and modify tables. Model and Controller: The model represents the database entity and the controller processes HTTP requests.

Solve database connection problem: a practical case of using minii/db library Solve database connection problem: a practical case of using minii/db library Apr 18, 2025 am 07:09 AM

I encountered a tricky problem when developing a small application: the need to quickly integrate a lightweight database operation library. After trying multiple libraries, I found that they either have too much functionality or are not very compatible. Eventually, I found minii/db, a simplified version based on Yii2 that solved my problem perfectly.

Laravel framework installation method Laravel framework installation method Apr 18, 2025 pm 12:54 PM

Article summary: This article provides detailed step-by-step instructions to guide readers on how to easily install the Laravel framework. Laravel is a powerful PHP framework that speeds up the development process of web applications. This tutorial covers the installation process from system requirements to configuring databases and setting up routing. By following these steps, readers can quickly and efficiently lay a solid foundation for their Laravel project.

The Continued Use of PHP: Reasons for Its Endurance The Continued Use of PHP: Reasons for Its Endurance Apr 19, 2025 am 12:23 AM

What’s still popular is the ease of use, flexibility and a strong ecosystem. 1) Ease of use and simple syntax make it the first choice for beginners. 2) Closely integrated with web development, excellent interaction with HTTP requests and database. 3) The huge ecosystem provides a wealth of tools and libraries. 4) Active community and open source nature adapts them to new needs and technology trends.

MySQL and phpMyAdmin: Core Features and Functions MySQL and phpMyAdmin: Core Features and Functions Apr 22, 2025 am 12:12 AM

MySQL and phpMyAdmin are powerful database management tools. 1) MySQL is used to create databases and tables, and to execute DML and SQL queries. 2) phpMyAdmin provides an intuitive interface for database management, table structure management, data operations and user permission management.

See all articles