【问题标题】:Laravel 5.5 Redis problem - Call to undefined method Illuminate\Support\Facades\Redis::connect()Laravel 5.5 Redis 问题 - 调用未定义的方法 Illuminate\Support\Facades\Redis::connect()
【发布时间】:2019-04-04 10:43:21
【问题描述】:

我将我的 Laravel 5.5 应用程序移动到另一台服务器 - 我在那里使用完全相同的代码(做了一个 git clone)和完全相同的 composer.jsoncomposer.lock 文件(即使 NGINX 配置是相同的) .

当我运行我的应用程序时,我收到以下错误:

Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Call to undefined method Illuminate\Support\Facades\Redis::connect()

代码如下:

namespace App\Http\Controllers;
use Illuminate\Http\Request;
...
public function somefunction() {
    $redis = new \Redis();
    $redis->connect(env('REDIS_HOST')); <-------------
...

composer 包predis/predis 已安装,我的系统上没有php-redis

在两个系统 (debian) 上都安装了 redis 并在 127.0.0.1 上运行。两个系统在.envconfig/* 中使用相同的配置:

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

唯一不同的是,在一个系统(旧系统)上我正在运行 php7.0 而在新系统上我运行 php7.3 - 我在新系统上切换到 php7.0 以检查如果这是错误,但我仍然得到异常。

再一次 - 在我的另一台服务器上,使用完全相同的代码一切都运行良好,这让我很沮丧 - 我不知道为什么会这样。

【问题讨论】:

  • Redis 配置中是否将“集群”(如果存在)设置为“false”?
  • 尝试“连接”而不是“连接”。见$redis-&gt;connection(env('REDIS_HOST'));
  • 是的,connection 有效。我已经猜到了,但是为什么呢?我也不想更改代码。
  • 因为你通过调用Redis::connection();方法得到了一个Redis实例。这将为您提供默认 Redis 服务器的实例。您还可以将连接或集群名称传递给连接方法,以获取 Redis 配置中定义的特定服务器或集群
  • @JitendraAhuja - 你是绝对正确的!我匆匆忙忙把东西搞砸了。我一直在想我一直在使用 predis 扩展。伙计,非常感谢您的努力和时间!我犯了一个大错误,过去和现在都是非常紧张的一天。再次感谢您!

标签: laravel redis laravel-5.5 predis phpredis


【解决方案1】:

我认为这些是您需要检查的一些基本步骤:

1) 首先,确保您已安装 phpredis PHP 扩展

2) 如果您的 redis 配置中有集群,请确保将其设置为 false:请参阅

'cluster' =&gt; false,

3) 尝试检查 Redis 服务器是否正常工作并且 redis 客户端能够与其连接。有时 redis 服务器意外崩溃或关闭,您可能需要重新启动或关闭它们并再次工作。

4) 如果您在 *nix 环境中运行,您可以检查 netstat 输出以查看 Redis 是否正在侦听您配置为侦听的任何端口(例如 6379):

netstat -na | grep 6379

如果它正在监听,你应该会看到这样的输出:

tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:53760 127.0.0.1:6379 TIME_WAIT tcp 0 0 127.0.0.1:6379 127.0.0.1:48107 ESTABLISHED tcp 0 0 127.0.0.1:53758 127.0.0.1:6379 TIME_WAIT tcp 0 0 127.0.0.1:48107 127.0.0.1:6379 ESTABLISHED

5)在app/config/cache.php中,设置驱动为redis:

'driver' =&gt; 'redis'

6) 尝试在app/config/session.php中使用redis作为驱动:

'driver' =&gt; 'redis'

7) 在源代码顶部添加以下内容:

use Illuminate\Redis\Database as Redis;

"use Illuminate\Support\Facades\Redis"

8) 尝试在 app/config/app.php 中将类别名更改为 RedisL4 类似

'RedisL4' =&gt; 'Illuminate\Support\Facades\Redis',

然后使用此代码可能会解决问题:

$redis = RedisL4::connect(); 或更重要的是它的“连接”而不是“连接”所以

$redis = RedisL4::connection(Your-Connection-Here);

【讨论】:

  • 不幸的是,它没有帮助。关于第 1 点:我使用的是 predis/predis 而不是 phpredis。
【解决方案2】:

确保您正确传递了 REDIS_CLIENT

对我来说,我通过 composer 安装了predis,但 REDIS_CLIENT 设置为 phpredis

我必须在我的 database.php / .env 文件中将 REDIS_CLIENT 更改为 predis

REDIS_CLIENT=predis

【讨论】:

    猜你喜欢
    • 2019-10-15
    • 2016-04-03
    • 1970-01-01
    • 2020-01-24
    • 2019-03-04
    • 2023-03-24
    • 2019-05-14
    • 2021-10-29
    • 2023-03-27
    相关资源
    最近更新 更多