PHP implements the effect of mysql connection pool
This article mainly introduces the PHP code to achieve the effect of mysql connection pool. Friends who need it can refer to
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; } } }
Call this in another file
<?php require_once 'db.php'; $sql = 'select * from user'; $dbhelper = new DbHelper; for ($i=0; $i < 10; $i++) { $res = $dbhelper->query($sql); // var_dump($res) . PHP_EOL; }
How to use the connection pool of ThinkPHP to connect to MySQL
Because of a small The bug caused the project to send a large number of connection requests to mysql one night. At the same time, there was a problem with the dns of the mysql server, causing the anti-resolution timeout. 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), ); }
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.
The above is the result of a whole day of research. Please point out any imperfections and thank you in advance!
The above is the entire content of this article. Thank you everyone for reading. For more related content, please pay attention to the PHP Chinese website!
Related recommendations:
thinkphp3.2.3 version database addition, deletion, modification and query implementation code
The above is the detailed content of PHP implements the effect of mysql connection pool. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

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

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

MySQL is an open source relational database management system, mainly used to store and retrieve data quickly and reliably. Its working principle includes client requests, query resolution, execution of queries and return results. Examples of usage include creating tables, inserting and querying data, and advanced features such as JOIN operations. Common errors involve SQL syntax, data types, and permissions, and optimization suggestions include the use of indexes, optimized queries, and partitioning of tables.

MySQL's position in databases and programming is very important. It is an open source relational database management system that is widely used in various application scenarios. 1) MySQL provides efficient data storage, organization and retrieval functions, supporting Web, mobile and enterprise-level systems. 2) It uses a client-server architecture, supports multiple storage engines and index optimization. 3) Basic usages include creating tables and inserting data, and advanced usages involve multi-table JOINs and complex queries. 4) Frequently asked questions such as SQL syntax errors and performance issues can be debugged through the EXPLAIN command and slow query log. 5) Performance optimization methods include rational use of indexes, optimized query and use of caches. Best practices include using transactions and PreparedStatemen

MySQL is chosen for its performance, reliability, ease of use, and community support. 1.MySQL provides efficient data storage and retrieval functions, supporting multiple data types and advanced query operations. 2. Adopt client-server architecture and multiple storage engines to support transaction and query optimization. 3. Easy to use, supports a variety of operating systems and programming languages. 4. Have strong community support and provide rich resources and solutions.

Apache connects to a database requires the following steps: Install the database driver. Configure the web.xml file to create a connection pool. Create a JDBC data source and specify the connection settings. Use the JDBC API to access the database from Java code, including getting connections, creating statements, binding parameters, executing queries or updates, and processing results.

The process of starting MySQL in Docker consists of the following steps: Pull the MySQL image to create and start the container, set the root user password, and map the port verification connection Create the database and the user grants all permissions to the database

The main role of MySQL in web applications is to store and manage data. 1.MySQL efficiently processes user information, product catalogs, transaction records and other data. 2. Through SQL query, developers can extract information from the database to generate dynamic content. 3.MySQL works based on the client-server model to ensure acceptable query speed.

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.

The key to installing MySQL elegantly is to add the official MySQL repository. The specific steps are as follows: Download the MySQL official GPG key to prevent phishing attacks. Add MySQL repository file: rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm Update yum repository cache: yum update installation MySQL: yum install mysql-server startup MySQL service: systemctl start mysqld set up booting
