服务器上会出现这个错误。很少但是会出现。
参考网上示例。把read_write_timeout 改成了0 还是不行。想问下大大,可能是什么原因。跟workerman多进程切换有关系吗
Predis\Connection\AbstractConnection::onConnectionError code:0 msg:Error while reading line from the server.
If you are using Predis in a daemon-like script you should set read_write_timeout to -1 if you want to completely disable the timeout (this value works with older and newer versions of Predis). Also, remember that you must disable the default timeout of Redis by setting timeout = 0 in redis.conf or Redis will drop the connection of idle clients after 300 seconds of inactivity.
怎么感觉是腾讯云redis 集群的问题
现在不确定。我试试本地连接腾讯云试试
redis服务端有个timeout配置,是用来关闭不活跃reids连接的,设置成0试下
恩我在github看到了一个答案是说
If you are using Predis in a daemon-like script you should set read_write_timeout to -1 if you want to completely disable the timeout (this value works with older and newer versions of Predis). Also, remember that you must disable the default timeout of Redis by setting timeout = 0 in redis.conf or Redis will drop the connection of idle clients after 300 seconds of inactivity.
说如果守护进程的话使用predis的话要改成-1.
Also, remember that you must disable the default timeout of Redis by setting timeout = 0 in redis.conf
我说的是这个,redis服务端的配置
@16:这个啊我看看。这个值是用来关闭不活跃的链接的。如果设置为0 的话意思是不在关闭不活跃的链接对吧?那这样对性能会有影响吗。我是否可以在我每次我处理完一个请求之后我程序手动关闭当前使用的redis 链接?
可以手动关闭啊
@16:怎么关闭我在文档里没看到。能给下提示吗
@16:直接disconnect 就行是吧
额,我没用过Predis
@16:感觉不行啊。redis已经设置了timeout=0.还是有报错。手动关闭的话感觉也有点问题
在onWorkerStart里初始化redis,千万不要在onWorkerStart执行前就初始化,onWorkerStart执行前初始化redis的redis连接属于主进程,fork的子进程会自动继承主进程的这个redis连接,这样会导致多个子进程都可以对同一个redis连接进行读写,导致数据错乱。
我是在
$http_worker->onWorkerStart = function($http_worker) {
// init app
App::init();
};
onWorkerStart 里初始化的单例的redis。平时不会有问题。就是请求量多的时候会报上面那个错。
其实和这个问题类似: http://wenda.workerman.net/?/question/2697