redis的php客户端为什么连接数这么大


我在网站中使用了redis作为缓存系统,并且用了它的pecl客户端(就是这个 https://github.com/nicolasff/phpredis )。使用没什么问题,但是最近再看链接数的时候发现了个问题,就是后台链接数特别高

链接数截屏

上图可以看到 netstat -na | grep 6379 后的端口占用情况,其实还有几个屏幕,我就不贴了。我想问的是,这是客户端的bug还是它本身就是这样?如果它本身就是这样,那这样占用下去会不会出什么问题,还是它自己有个上限的?因为我没有看到它的配置或者初始化参数里有连接池之类的设置,所以可以肯定这应该不是连接池的hold状态。

我看到它的连接方法有 connect pconnect ,我目前用的是 connect ,因为参照对 mysql_pconnect 的理解,现在请求数不是很大,也就没有必要用 connect ,而且它也应该在脚本结束后释放连接。现在的情况是,这些连接似乎只会在redis的server端在超时时间30秒后被自动断掉。

我担心如果以后请求数大了,30秒内就会被撑暴了。

Redis php nosql

奇犽丶揍敌客 11 years, 4 months ago

我也使用的是这个插件,经过我的测试,这绝对是此redis客户端一个坑爹的设计!因为它居然要自己去关闭连接,关闭连接对php的开发者是一个几乎要遗忘的操作。

因为一般扩展的开发者,都会在脚本结束时自己关闭已经使用的连接,但是这个插件居然没有,而是需要你自己去关闭。当然关闭连接对只对 connect 函数有效, pconnect 是不需要关闭连接的。其具体使用方法就是在脚本结束前调用redis对象的close方法,来关闭连接。或者更省事点,用类似下面的代码

register_shutdown_function(function () {
    global $redis;
    $redis->close();
});

经过测试,自己关闭连接后,用 netstat -na 看6379端口的连接就很少了。

pptp1 answered 11 years, 4 months ago

Your Answer