tourze / symfony-aop-pool-bundle
AOP连接池
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: ^8.1
- doctrine/dbal: ^3.7.0 || ^4.0
- monolog/monolog: ^3.0
- symfony/config: ^6.4
- symfony/console: ^6.4
- symfony/dependency-injection: ^6.4
- symfony/event-dispatcher: ^6.4
- symfony/framework-bundle: ^6.4
- symfony/http-kernel: ^6.4
- symfony/service-contracts: ^2.5 || ^3
- symfony/yaml: ^6.4 || ^7.1
- tourze/backtrace-helper: ~0.0.5
- tourze/symfony-aop-bundle: 0.0.*
- tourze/symfony-runtime-context-bundle: 0.0.*
- utopia-php/pools: ^0.5
Requires (Dev)
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2025-04-20 20:16:24 UTC
README
AopPoolBundle is a Symfony bundle for automatic connection pooling using AOP (Aspect-Oriented Programming). It provides efficient resource pooling for Redis, database, and custom services, improving performance and resource utilization.
Features
- Automatic lifecycle management for connections (borrow/return)
- Built-in Redis and Doctrine DBAL connection pools
- Custom poolable services via
#[ConnectionPool]
attribute - Connection pool status monitoring, aging detection, and auto-destroy
- Lazy initialization, auto-reconnect, retry, and resource recycling
- Detailed logging and debug support
Installation
- Requires PHP 8.1+, Symfony 6.4+
- Dependencies:
doctrine/dbal
,snc/redis-bundle
, etc.
composer require tourze/symfony-aop-pool-bundle
Performance & Debugging Tips
- Pool only necessary services, set pool size appropriately
- Enable debug logs to monitor pool usage
- Ensure connections are properly released
Quick Start
1. Mark Custom Service for Pooling
use Tourze\Symfony\AopPoolBundle\Attribute\ConnectionPool; #[ConnectionPool] class YourService { private $connection; public function doSomething() { // Connection is automatically fetched from the pool $result = $this->connection->query(...); return $result; } }
2. Redis Connection Pool
Redis clients are automatically pooled, no extra configuration required:
class YourService { public function __construct(private \Redis $redis) {} public function doSomething() { return $this->redis->get('key'); } }
3. Database Connection Pool
Doctrine DBAL connections are automatically pooled:
use Doctrine\DBAL\Connection; class YourService { public function __construct(private Connection $connection) {} public function doSomething() { return $this->connection->executeQuery('SELECT ...'); } }
Services Automatically Pooled
- All services tagged as
snc_redis.client
- All
doctrine.dbal.*_connection
services - All services with the
#[ConnectionPool]
attribute
Notes & Limitations
- Connections are automatically returned to the pool at the end of each request
- Expired connections are destroyed (default TTL: 1 minute)
- Default pool size: 500 (configurable)
- Max retry attempts = pool size + 1
- Pool switching in transactions is not supported
- Some special services may not be suitable for pooling
- StopWorkerException is thrown if connection fetch fails; automatic retry supported
- Reconnect attempts and intervals are configurable