[中文简介] http://blog.sina.com.cn/s/blog_9eaa0f400102v9fd.html
提供连接池,读写分离,负载均衡,慢查询日志,大数据块日志等功能
- PHP 5.3 + (no zts)
- linux 2.6+
- pdo and redis extension install
phpize=>./configure=>make install=>echo "extension=xx/connect_pool.so">php.ini
##技术特性:
- 提供了release方法,在每次fetch数据后(redis的get set) 调用,将连接放回到池子里面,避免其他耗时操作导致的db层连接数过高问题。
- 提供最大最小连接数配置支持。
- 连接自动ping 数据库, 防止压力小长时间不请求导致的gone away问题
- 根据压力自动获取(最大到最大连接数)或者释放(释放最小到最小连接数)池子里面的连接。
- 做了大量优化虽然请求经过代理进程转发但基本没有性能损耗.
- 当池子里面的连接被占用没了,接下来的挣钱连接的进程将会排队,直到持有连接的进程release连接.
- 使用透明化,相对于传统的pdo和redis操作,只需要修改new的类名,以及适当时机release连接即可(可以集成到db层框架)
- 支持pdo的读写分离和从库的负载均衡。
- 支持cli模式下的pdo和redis异步查询。
- 支持慢查询日志(max_hold_time_to_log)以及大的数据块(max_data_size_to_log)日志功能。
- 请求结束(rshutdown/mshutdown阶段)会调用自动调用release,不要依赖于这个release,否则连接利用率会很低
- 关于异常: pdoProxy和原生Pdo不一样的一点是 默认pdo是静默模式 不抛异常 pdoProxy是抛异常的(且是用Exception类抛出的 不是PDOException)
- pool_server 必须以root用户启动
- redis不支持pub/sub方法
- 当你用完一个连接后(例如:fetchAll调用结束),请调用release来马上释放连接到池子里面(如果事务需要在事务commit或者rollback后release),如果不想改业务代码可以在框架层每次fetch(或者get/set)用完之后调用release方法。
- yii请参考项目中的frame_example
- redis请参考项目中的frame_example
- ci 请参考此项目 https://github.com/ethenoscar2011/codeigniter-phpcp
- thinkphp 请参考 http://git.oschina.net/xavier007/THINKPHP_phpcp_driver
step 1 将项目中的pool.ini文件mv到/etc/pool.ini,并根据需求修改配置文件
step 2 启动代理进程:
```support "start" "stop" "restart"
step 3 适当修改你的php脚本: