在 Lumen 中找不到“Redis”类

Sha*_*ath 4 php redis lumen

  • 流明版本:6.0
  • PHP 版本:7.2
  • 数据库驱动和版本:MySql 5.7,Redis

图片

代码

use Illuminate\Support\Facades\Redis;

Redis::set($key, $data, 'EX', $expiry);
Run Code Online (Sandbox Code Playgroud)

在 app.php 中

$app->withFacades();
$app->withEloquent();

$app->register(Illuminate\Redis\RedisServiceProvider::class);

$app->configure('database');
Run Code Online (Sandbox Code Playgroud)

使用上面的代码会给出Class 'Redis' not found错误。仅当安装了以下软件包时才会发生此错误。

"illuminate/redis": "^6.5",
"illuminate/mail": "^6.5",
"laravel/lumen-framework": "^6.0",
Run Code Online (Sandbox Code Playgroud)

使用以下版本较低的软件包,它可以正常工作而不会出现任何错误/问题。

"laravel/lumen-framework": "^5.8.*",
"illuminate/redis": "^5.8",
"illuminate/mail": "^5.8",
Run Code Online (Sandbox Code Playgroud)

那么为什么在升级包时会出错。

pab*_*ros 14

如果您使用Laravel 8, 在database.php文件中替换以下行:

'client' => env('REDIS_CLIENT', 'phpredis')
Run Code Online (Sandbox Code Playgroud)

到:

'client' => env('REDIS_CLIENT', 'predis')
Run Code Online (Sandbox Code Playgroud)

然后,添加predis依赖项composer

composer require predis/predis
Run Code Online (Sandbox Code Playgroud)


big*_*ace 5

您可以修改 config/database.php。

因为 lumen6 redis 默认驱动使用的是 phpredis。

像这样添加 .env 文件。

REDIS_CLIENT=predis
Run Code Online (Sandbox Code Playgroud)


Des*_*ell 2

确保您设置并启用 PHP Redis 扩展。

即使完成此操作后,您仍需要在 app.php 文件中注册 Redis 的别名。很明显,您通过 use 语句引用了它,但这仅在您“使用”它的类中可见。PHP Redis 连接器需要从全局某个位置(位于 app.php 文件中)引用它。Laravel 已经提供了这个设置,但不幸的是 Lumen 没有。

为了安全起见,请通过检查类是否存在来包装它。

这就是我解决问题的方法。

#You already have this:
$app->register(Illuminate\Redis\RedisServiceProvider::class);

#Add the following right below
if (!class_exists('Redis')) {
    class_alias('Illuminate\Support\Facades\Redis', 'Redis');
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以简单地使用 apt-get install php7.X-redis 来设置扩展。安装后重新启动网络服务就可以了。 (2认同)