2014-05-09 112 views
3

我在一个PHP项目中使用Redis。我使用phpredis作为客户端。有时候,在长时间的CLI脚本中,我遇到了PHP分段错误。为什么我应该关闭或保持Redis连接打开?

我以前经验过,phpredis在连接超时时遇到问题。由于我的Redis配置被配置为在300秒后自动关闭空闲连接,我想这会导致分段错误。

为了能够选择是否增加连接超时或将其默认为0(意思是“永不超时”),我想知道可能的优点和缺点是什么?

为什么我不应该关闭连接?
为什么我应该确保连接不会打开?

感谢

回答

0

的回答你的问题在很大程度上取决于你的应用程序的Redis使用的情况。那么,您是否应该永远不要关闭空闲连接超时连接?

一般没有,你应该保持默认 - 0.为什么或者:

  • 任何类型的长期生活的应用。如CLI脚本或后台工作者。为什么 - phpredis没有建立重连功能,所以你应该自己照顾一下,或者不要空闲超时。
  • 每次处理您的请求或CLI脚本死掉 - 所有连接都将被php引擎关闭。 Redis服务器关闭所有关闭客户端套接字的连接。你将不会有像僵尸连接或类似的问题。作为扩展,phpredis在析构函数中关闭连接 - 所以你可能确定连接不会保持打开状态。

p.s.当然你可以自己实现在php中重新连接insome代理类。我们在高负载环境中有redis - 每秒约4000个连接。在2.4版本之后,我们不使用空闲连接超时。并没有任何类型的麻烦。

1

通常,打开连接是一项昂贵的操作,所以现代最佳实践是保持打开。另一方面,开放连接需要资源(从数据库)进行管理,以保持大量闲置连接的打开也是有问题的。这种折衷通常通过使用连接池来解决。

这就是说,更有趣的是为什么PHP段错误。显然,超时是由长时间运行的命令(您的案例中的CLI脚本)造成的,它阻止了Redis(即mostly single threaded)参与PHP应用程序的连接。虽然这是一个众所周知的Redis行为,但我期望PHP(无需在客户端库重新连接时的事件)不会如此悲惨地穿上它的裤子。

相关问题