PHP Redis超时,连接读取错误?

PHP Redis超时,连接读取错误?,php,redis,phpredis,Php,Redis,Phpredis,“PHP致命错误:未捕获异常‘RedisException’,消息为‘连接读取错误’” 这里的司机是菲普雷迪斯 $redis->blpop('a', 0); 这总是在约1分钟后超时。My redis.conf显示超时0和$redis->getOption(redis::OPT_READ_timeout)返回double(0) 如果我这样做,它就不会超时$redis->setOption(redis::OPT_READ_TIMEOUT,-1) 为什么我需要-1?Redis文档说Redis.

“PHP致命错误:未捕获异常‘RedisException’,消息为‘连接读取错误’”

这里的司机是菲普雷迪斯

$redis->blpop('a', 0);
这总是在约1分钟后超时。My redis.conf显示超时0和
$redis->getOption(redis::OPT_READ_timeout)
返回
double(0)

如果我这样做,它就不会超时
$redis->setOption(redis::OPT_READ_TIMEOUT,-1)

为什么我需要-1?Redis文档说Redis.conf中的
timeout 0
不应该让我超时


“默认情况下,如果客户端空闲数秒,Redis的最新版本不会关闭与客户端的连接:连接将永远保持打开状态。”

我所知道的当前解决方案是禁用phpredis的持久连接,就像它们一直以来一样。如果您使用的是php fpm或其他线程化模型,则可以使用该库

通过以下方法可以降低此错误的频率


此外,phpredis中的读取超时配置并不普遍受支持。该功能(查找
OPT\u READ\u TIMEOUT
)是。

在对文章进行了大量研究并对redis和php进行了自己的研究之后,这个问题似乎很容易解决。我的用例中的主要问题是redis服务器无法将内存中的写操作保存到磁盘数据库中

我保留了php.ini和redis.conf中的所有超时值,没有进行建议的黑客更改,然后单独尝试了上述解决方案,使用所有关于在php和redis-conf文件中更改超时值的建议都无法解决的“连接读取错误”问题消失了


我还看到了一些关于将文件描述符的限制提高到100000等的建议。我正在一个文件描述符限制为1024的云服务器上运行我的用例,我的用例在这个限制下运行得非常好。

我在我的php程序中添加了代码
ini\u集('default\u socket\u timeout',-1)
,但我发现它没有立即起作用

然而,在我再次开始运行php程序的3分钟后,我终于找到了原因:redis连接不是持久的

因此,我在我的
redis.conf
中设置了
timeout=0
,问题就解决了

$redis->connect(host, port, timeout1);

其中超时1必须长于超时2

$redis->blpop($key, timeout2);