安装 Laravel Redis库后出现错误
目标
- LaravelのセッションをAWSのElastiCatcheで管理しようと思いpredis/predisをインストール後にローカルサーバを起動したときのエラーの解決方法をまとめる
进行环境
- ハードウェア環境
- ソフトウェア環境
前提信息
-
- 下記作業を実施時のライブラリのインストール後にブラウザに出たエラーを解決する。
Laravel キャッシュファイルをAWSのElasticCacheに保存する
今回問題になっているLaravelアプリはMacのローカルに直接作成したアプリである。Dockerなどは使用していない。
問題的发展过程
-
- 在应用程序目录下执行以下命令获取库。
$ composer require predis/predis
在应用程序目录下执行以下命令启动本地服务器。
$ php artisan serve
将该应用程序的.env文件中的SESSION_DRIVER=file更改为SESSION_DRIVER=redis。
访问以下网址。
http://127.0.0.1:8000/
有什麼疑慮?

问题的解决过程
-
- 在可能.env文件的SESSION_DRIVER=值为SESSION_DRIVER=redis时,如果没有安装PhpRedis PHP扩展,将会出现此错误。官方文档推荐在使用Redis时安装PhpRedis PHP扩展。
-
- 不过,只要安装了predis/predis库,应该可以正常工作,但按照建议安装PhpRedis PHP扩展可能会解决问题。
-
- 以下是在Mac本地安装PhpRedis PHP扩展的方法。
安装Mac上的PhpRedis PHP扩展
启动本地服务器并访问以下网址。
http://127.0.0.1:8000/
页面一直没有显示,并且返回以下错误。
Operation timed out
通过查看以下官方文档,发现在使用predis/predis库时,应将config/database.php文件中的redis数组的client键的第二个参数更改为’predis’。尽管已经安装了PhpRedis PHP扩展,但还是尝试了这个方法。
Laravel 6.x Redis
执行以下命令卸载PhpRedis PHP扩展。
$ pecl uninstall redis
执行以下命令以查找php.ini文件的位置。
$ php -r “echo phpinfo();” | grep “php.ini”
执行以下命令创建php.ini文件的备份。(以下命令指定了我的环境中php.ini文件的位置,请根据上面的命令输出指定php.ini的路径并创建备份。)
cp /usr/local/etc/php/7.4/php.ini /usr/local/etc/php/7.4/php.ini_org
执行以下命令打开php.ini文件。(以下命令指定了我的环境中php.ini文件的位置,请根据上面的命令输出指定php.ini的路径并打开文件。)
$ vi /usr/local/etc/php/7.4/php.ini
文件应该包含以下内容,将其注释掉并保存。
修正前
/usr/local/etc/php/7.4/php.ini
extension=”redis.so”
修正后
/usr/local/etc/php/7.4/php.ini
;extension=”redis.so”
在应用程序目录中执行以下命令以打开配置文件。
$ vi config/database.php
进行以下修改。
修正前
config/database.php
/*
|————————————————————————–
| Redis Databases
|————————————————————————–
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer body of commands than a typical key-value system
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/
‘redis’ => [
‘client’ => env(‘REDIS_CLIENT’, ‘phpredis’),
‘options’ => [
‘cluster’ => env(‘REDIS_CLUSTER’, ‘redis’),
‘prefix’ => env(‘REDIS_PREFIX’, Str::slug(env(‘APP_NAME’, ‘laravel’), ‘_’).’_database_’),
],
‘default’ => [
‘url’ => env(‘REDIS_URL’),
‘host’ => env(‘REDIS_HOST’, ‘127.0.0.1’),
‘password’ => env(‘REDIS_PASSWORD’, null),
‘port’ => env(‘REDIS_PORT’, ‘6379’),
‘database’ => env(‘REDIS_DB’, ‘0’),
],
‘cache’ => [
‘url’ => env(‘REDIS_URL’),
‘host’ => env(‘REDIS_HOST’, ‘127.0.0.1’),
‘password’ => env(‘REDIS_PASSWORD’, null),
‘port’ => env(‘REDIS_PORT’, ‘6379’),
‘database’ => env(‘REDIS_CACHE_DB’, ‘1’),
],
],
修正后
config/database.php
/*
|————————————————————————–
| Redis Databases
|————————————————————————–
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer body of commands than a typical key-value system
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/
‘redis’ => [
/* 以下进行修改 */
‘client’ => env(‘REDIS_CLIENT’, ‘predis’),
‘options’ => [
‘cluster’ => env(‘REDIS_CLUSTER’, ‘redis’),
‘prefix’ => env(‘REDIS_PREFIX’, Str::slug(env(‘APP_NAME’, ‘laravel’), ‘_’).’_database_’),
],
‘default’ => [
‘url’ => env(‘REDIS_URL’),
‘host’ => env(‘REDIS_HOST’, ‘127.0.0.1’),
‘password’ => env(‘REDIS_PASSWORD’, null),
‘port’ => env(‘REDIS_PORT’, ‘6379’),
‘database’ => env(‘REDIS_DB’, ‘0’),
],
‘cache’ => [
‘url’ => env(‘REDIS_URL’),
‘host’ => env(‘REDIS_HOST’, ‘127.0.0.1’),
‘password’ => env(‘REDIS_PASSWORD’, null),
‘port’ => env(‘REDIS_PORT’, ‘6379’),
‘database’ => env(‘REDIS_CACHE_DB’, ‘1’),
],
],
尽管出现了其他错误,但之前的关于不存在的PhpRedis PHP扩展的错误已经消失。