Laravel 5.5 Redis 问题 - 调用未定义的方法 Illuminate\Support\Facades\Redis::connect()
Laravel 5.5 Redis problem - Call to undefined method Illuminate\Support\Facades\Redis::connect()
我将我的 Laravel 5.5 应用程序移动到另一台服务器 - 我在那里使用完全相同的代码(做了 git clone
)和完全相同的 composer.json
和 composer.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
上安装了 运行s。两个系统在 .env
和 config/*
中使用相同的配置:
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
唯一不同的是,在一个系统(旧系统)上我 运行nning php7.0
而在新系统上我 运行 php7.3
- 我在新系统上切换到 php7.0
以检查是否是错误,但我仍然遇到异常。
再一次 - 在我的另一台服务器上,使用完全相同的代码一切正常 运行,这让我很沮丧 - 我不明白为什么会这样。
我认为这些是您需要检查的一些基本步骤:
1) 首先,确保你安装了 phpredis PHP 扩展
2) 如果您的 redis 配置中有集群,请确保将其设置为 false:参见
'cluster' => 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' => 'redis'
6) app/config/session.php:
尝试使用redis作为驱动
'driver' => 'redis'
7) 在源代码顶部添加以下内容:
use Illuminate\Redis\Database as Redis;
或
"use Illuminate\Support\Facades\Redis"
8) 尝试在 app/config/app.php 中将 class 别名更改为 RedisL4,例如
'RedisL4' => 'Illuminate\Support\Facades\Redis',
然后使用此代码可能会解决问题:
$redis = RedisL4::connect();
或更重要的是 "connection" 而不是 "connect" 所以
$redis = RedisL4::connection(Your-Connection-Here);
确保您正确传递 REDIS_CLIENT。
对我来说,我安装了 predis via composer, but REDIS_CLIENT was set to phpredis。
我不得不在我的 database.php / .env 文件中将 REDIS_CLIENT 更改为 predis。
REDIS_CLIENT=predis
我将我的 Laravel 5.5 应用程序移动到另一台服务器 - 我在那里使用完全相同的代码(做了 git clone
)和完全相同的 composer.json
和 composer.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
上安装了 运行s。两个系统在 .env
和 config/*
中使用相同的配置:
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
唯一不同的是,在一个系统(旧系统)上我 运行nning php7.0
而在新系统上我 运行 php7.3
- 我在新系统上切换到 php7.0
以检查是否是错误,但我仍然遇到异常。
再一次 - 在我的另一台服务器上,使用完全相同的代码一切正常 运行,这让我很沮丧 - 我不明白为什么会这样。
我认为这些是您需要检查的一些基本步骤:
1) 首先,确保你安装了 phpredis PHP 扩展
2) 如果您的 redis 配置中有集群,请确保将其设置为 false:参见
'cluster' => 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' => 'redis'
6) app/config/session.php:
尝试使用redis作为驱动'driver' => 'redis'
7) 在源代码顶部添加以下内容:
use Illuminate\Redis\Database as Redis;
或
"use Illuminate\Support\Facades\Redis"
8) 尝试在 app/config/app.php 中将 class 别名更改为 RedisL4,例如
'RedisL4' => 'Illuminate\Support\Facades\Redis',
然后使用此代码可能会解决问题:
$redis = RedisL4::connect();
或更重要的是 "connection" 而不是 "connect" 所以
$redis = RedisL4::connection(Your-Connection-Here);
确保您正确传递 REDIS_CLIENT。
对我来说,我安装了 predis via composer, but REDIS_CLIENT was set to phpredis。
我不得不在我的 database.php / .env 文件中将 REDIS_CLIENT 更改为 predis。
REDIS_CLIENT=predis