• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

laravel4 Predis访问redis返回Error while reading line from the server

php 搞代码 4年前 (2022-01-25) 18次浏览 已收录 0个评论
文章目录[隐藏]

我使用了laravel 4 framework开发,想把cache server从memcache切换到redis,在config/cache.php的driver设置为redis。但是调用cache::get()报错,报错信息如:

<code>[2014-10-21 18:47:44] production.ERROR: exception 'Predis\Connection\ConnectionException' with message 'Error while reading line from the server [tcp://127.0.0.1:6379]' in /home/nginx/mono/vendor/predis/predis/lib/Predis/Connection/AbstractConnection.php:141</code>

但是从redis-cli访问redis-server是ok的,在phpunit中单独测试redis也没问题。但是在Route中直接使用有问题。

<code>Route::get('/test', function(){    Cache::put('name', 'Taylor', 60); //报错!    $name = Cache::get('name');     echo $name;});</code>

谁能解释下问题在哪?

补充:刷新多次/test,会有几次正常。

回复内容:

我使用了laravel 4 framework开发,想把cache server从memcache切换到redis,在config/cache.php的driver设置为redis。但是调用cache::get()报错,报错信息如:

<code>[2014-10-21 18:47:44] production.ERROR: exception 'Predis\Connection\ConnectionException' with message 'Error while reading line from the server [tcp://127.0.0.1:6379]' in /home/nginx/mono/vendor/predis/predis/lib/Predis/Connection/AbstractConnection.php:141</code>

但是从redis-cli访问redis-server是ok的,在phpunit中单独测试redis也没问题。但是在Route中直接使用有问题。

<code>Route::get('/test', function(){    Cache::put('name', 'Taylor', 60); //报错!    $name = Cache::get('name');     echo $name;});</code>

谁能解释下问题在哪?

补充:刷新多次/test,会有几次正常。

Predis的StreamConnection Class

<code>/** * Initializes a TCP stream resource. * * @param  ConnectionParametersInterface $parameters Parameters used to initialize the connection. * @return resource */protected function tcpStreamInitializer(ConnectionParametersInterface $parameters){    $uri = "tcp://{$parameters->host}:{$parameters->port}";    $flags = STREAM_CLIENT_CONNECT;    if (isset($parameters->async_connect) && $parameters->async_connect) {        $flags |= STREAM_CLIENT_ASYNC_CONNECT;    }    if (isset($parameters->persistent) && $parameters->persistent) {        $flags |= STREAM_CLIENT_PERSISTENT;        $uri .= strpos($path = $parameters->path, '/') === 0 ? $path : "/$path";    }    $resource = @stream_socket_client($uri, $errno, $errstr, $parameters->timeout, $flags);    if (!$resource) {        $this->onConnectionError(trim($errstr), $errno);    }    //问题在这里,需要给读取流设置超时时间,否则就在读取流数据时连接报错,    //可以直接设置read_write_timeout为0,以此解决问题。    if (isset($parameters->read_write_timeout)) {        $rwtimeout = $parameters->read_write_timeout;        $rwtimeout = $rwtimeout > 0 ? $rwtimeout : -1;        $timeoutSeconds  = floor($rwtimeout);        $timeoutUSeconds = ($rwtimeout - $timeoutSeconds) * 1000000;        stream_set_timeout($resource, $timeoutSeconds, $timeoutUSeconds);    }    if (isset($parameters->tcp_nodelay) && function_exists('socket_import_stream')) {  <strong style="color:transparent">本文来源gaodai#ma#com搞@@代~&码*网/</strong><strong>搞gaodaima代码</strong>      $socket = socket_import_stream($resource);        socket_set_option($socket, SOL_TCP, TCP_NODELAY, (int) $parameters->tcp_nodelay);    }    return $resource;}</code>

production.ERROR

config 中是否有 production 文件夹?里面是否有 cache.php 文件?那样的话会覆盖外面的配置。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:laravel4 Predis访问redis返回Error while reading line from the server

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址