utopia-php / pools
一个用于管理连接池的简单库
0.5.0
2024-04-19 11:11 UTC
Requires
- php: >=8.0
Requires (Dev)
- laravel/pint: 1.2.*
- phpstan/phpstan: 1.8.*
- phpunit/phpunit: ^9.3
This package is auto-updated.
Last update: 2024-09-19 12:04:32 UTC
README
Utopia pools库是一个简单轻量级的库,用于管理长生存连接池。这个库旨在尽可能简单且易于学习和使用。该库由Appwrite团队维护。
虽然这个库是Utopia框架项目的一部分,但它不依赖于其他库,可以独立于任何其他PHP项目或框架使用。
概念
- 池 - 一系列长生存连接。您可以从中弹出连接使用,然后将其推回池中以便重用。
- 连接 - 一个对象,以资源的形式持有长期存在的数据库或其他外部连接。PDO对象或Redis客户端是可以用于连接中的资源示例。
- 组 - 多个池的集合。
入门指南
使用composer安装
composer require utopia-php/pools
示例
use PDO; use Utopia\Pools\Pool; use Utopia\Pools\Group; $pool = new Pool('mysql-pool', 1 /* number of connections */, function() { $host = '127.0.0.1'; $db = 'test'; $user = 'root'; $pass = ''; $charset = 'utf8mb4'; try { $pdo = new PDO("mysql:host=$host;dbname=$db;charset=$charset", $user, $pass); } catch (\PDOException $e) { throw new \PDOException($e->getMessage(), (int)$e->getCode()); } return $pdo; }); $pool->setReconnectAttempts(3); // number of attempts to reconnect $pool->setReconnectSleep(5); // seconds to sleep between reconnect attempts $pool->setRetryAttempts(3); // number of attempts to get connection $pool->setRetrySleep(5); // seconds to sleep between failed pop-connection attempts $connection = $pool->pop(); // Get a connection from the pool $connection->getID(); // Get the connection ID $connection->getResource(); // Get the connection resource $pool->push($connection); // Return the connection to the pool $pool->reclaim(); // Recalim the pool, return all active connections automatically $pool->count(); // Get the number of available connections $pool->isEmpty(); // Check if the pool is empty $pool->isFull(); // Check if the pool is full $group = new Group(); // Create a group of pools $group->add($pool); // Add a pool to the group $group->get('mysql-pool'); // Get a pool from the group $group->setReconnectAttempts(3); // Set the number of reconnect attempts for all pools $group->setReconnectSleep(5); // Set the sleep time between reconnect attempts for all pools
重新连接和重试
重新连接和重试逻辑都用于pop()
方法来处理问题场景。两者都允许您配置2个属性
attempts
- 当出现问题时,库将重试多少次sleep
- 库在下次重试尝试之前将等待多长时间
重新连接设置用于您的连接初始化回调抛出异常时。例如,当与SQL服务器的握手失败时,可能会发生这种情况。
重试设置用于连接池为空且没有更多连接可以弹出时。例如,当您的服务器支持的并发操作数量多于您的池时,可能会发生这种情况。
系统要求
Utopia框架需要PHP 8.0或更高版本。我们建议在可能的情况下始终使用最新的PHP版本。
测试
要运行所有单元测试,请使用以下Docker命令
docker compose exec tests vendor/bin/phpunit --configuration phpunit.xml tests
要运行静态代码分析,请使用以下Psalm命令
docker compose exec tests vendor/bin/psalm --show-info=true
版权和许可
MIT许可证(MIT) http://www.opensource.org/licenses/mit-license.php