为什么应该关闭或保持 Redis 连接打开?

Sti*_*vni 6 php timeout segmentation-fault redis phpredis

我在 PHP 项目中使用 Redis。我使用 phpredis 作为客户端。有时,在较长的 CLI 脚本中,我会遇到 PHP 分段错误。

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

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

为什么我永远不应该关闭连接?
为什么我应该确保连接不保持打开状态?

谢谢

mis*_*ion 0

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

一般来说,,您应该保留默认值 - 0。为什么或何时:

  • 任何类型的长寿命应用程序。例如 CLI 脚本或后台工作者。为什么 - phpredis 没有内置重新连接功能,所以你应该自己处理这个问题,或者不要超时。
  • 每次处理您的请求或 CLI 脚本终止时 - 所有连接都将被 php 引擎关闭。Redis 服务器关闭已关闭的客户端套接字的所有连接。你不会遇到像僵尸连接之类的问题。作为扩展,phpredis 在析构函数中关闭连接 - 因此您可以确定连接不会保持打开状态。

ps 当然你可以自己在php中的某个代理类中实现重连。我们的 Redis 处于高负载环境中 - 实例上每秒约 4000 个连接。2.4版本之后我们不再使用空闲连接超时。并且不会有任何类型的麻烦。