PHP Redis是使用connect还是pconnect

 我来答
就烦条0o
2016-04-20 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46493
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
首先先介绍下connect和pconnect的区别。
connect:脚本结束之后连接就释放了。

pconnect:脚本结束之后连接不释放,连接保持在php-fpm进程中。
所以使用pconnect代替connect,可以减少频繁建立redis连接的消耗。
育知同创教育
2016-04-19 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
connect和pconnect的区别。
connect:脚本结束之后连接就释放了。
pconnect:脚本结束之后连接不释放,连接保持在php-fpm进程中。
为了验证这点,可以写个脚本测试一下。
其中服务器是nginx,php-fpm采用静态方式,因为动态方式下php-fpm的进程数量可能会变化,所以为了简单我们采用静态方式启动。
其中php-fpm的数量我们设置成5个。
下面的脚本测试使用connect的情况,让脚本连接到redis,然后休眠10s。
<?php
$app = new App ();
$app->get ( '/', function () {
$redis = new Redis ();
$redis->connect ( '127.0.0.1' );
sleep(10);
echo 'Hello World';
// $redis->close ();
} );
return $app;
然后运行5个请求:
curl http://localhost:8081/
这时候可以看下redis中的connect_clients:
[lunweiwei@stefanie ~]$ redis-cli info | grep connected_clients
connected_clients:14
等脚本运行完毕之后再看一下connect_clients:
[lunweiwei@stefanie ~]$ redis-cli info | grep connected_clients
connected_clients:9
之前建立的redis连接资源被释放了。
修改上面的代码,把connect改成pconnect:
<?php
$app = new App ();
$app->get ( '/', function () {
$redis = new Redis ();
$redis->pconnect ( '127.0.0.1' );
sleep(10);
echo 'Hello World';
// $redis->close ();
} );
return $app;
和上面同样的操作,发现脚本脚本运行结束后connected_clients还是14:
[lunweiwei@stefanie ~]$ redis-cli info | grep connected_clients
connected_clients:14
这说明脚本运行结束后,redis连接资源并没有释放,而是由php-fpm进程保持(可以通过 kill php-fpm看到,当脚本停止运行后连接释放)
所以使用pconnect代替connect,可以减少频繁建立redis连接的消耗。
另外,使用pconnect还可以减少同一个进程(php-fpm)频繁建立连接的消耗,可以通过以下代码验证:
使用connect的情况:
<?php
$redis1 = new Redis();
$redis1->connect('127.0.0.1');
sleep(5);
$redis2 = new Redis();
$redis2->connect('127.0.0.1');
sleep(5);
//$redis->close();
//$redis2->close();
运行上述脚本,会发现connect_clients会增加2个。
使用pconnect的情况:
<?php
$redis1 = new Redis();
$redis1->pconnect('127.0.0.1');
sleep(5);
$redis2 = new Redis();
$redis2->pconnect('127.0.0.1');
sleep(5);
//$redis->close();
//$redis2->close();
而运行上述代码,connect_clients只会增加1个,这说明在一个进程中,pconnect是可以保持redis连接状态提供复用的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式