我在 PHP 项目中使用 Redis。我使用 phpredis 作为客户端。有时,在较长的 CLI 脚本中,我会遇到 PHP 分段错误。
我之前经历过phpredis在连接超时时会出现问题。由于我的 Redis 配置配置为在 300 秒后自动关闭空闲连接,我猜这会导致分段错误。
为了能够选择是增加连接超时还是默认为0(意思是“永不超时”),我想知道可能的优点和缺点是什么?
为什么我永远不应该关闭连接?
为什么我应该确保连接不会保持打开状态?
谢谢
我在 PHP 项目中使用 Redis。我使用 phpredis 作为客户端。有时,在较长的 CLI 脚本中,我会遇到 PHP 分段错误。
我之前经历过phpredis在连接超时时会出现问题。由于我的 Redis 配置配置为在 300 秒后自动关闭空闲连接,我猜这会导致分段错误。
为了能够选择是增加连接超时还是默认为0(意思是“永不超时”),我想知道可能的优点和缺点是什么?
为什么我永远不应该关闭连接?
为什么我应该确保连接不会保持打开状态?
谢谢
通常,打开连接是一项昂贵的操作,因此现代最佳实践是保持连接打开。另一方面,打开的连接需要资源(来自数据库)来管理,因此保持大量空闲连接打开也可能是有问题的。这种权衡通常通过使用连接池来解决。
也就是说,更有趣的是为什么 PHP 会出现段错误。显然,超时是由长时间运行的命令(在您的情况下为 CLI 脚本)导致的,该命令阻止了 Redis(主要是单线程)参与 PHP 应用程序的连接。虽然这是一个众所周知的 Redis 行为,但我希望 PHP(在客户端库中没有重新连接功能的事件)不会如此悲惨。
您的问题的答案很大程度上取决于您的应用程序中使用 redis 的情况。那么,您是否应该永远关闭空闲连接超时的连接?
一般来说不,你应该保持默认 - 0。为什么或何时:
ps 当然你可以自己在php中的某个代理类中实现重连。我们在高负载环境中有 redis - 实例上每秒约 4000 个连接。2.4 版本之后我们不再使用空闲连接超时。并且没有任何类型的麻烦。