在Docker的Laravel环境中引入Redis和phpredis
首先
我根据Laravel的日语文档,在Docker的Laravel环境中尝试引入Redis,但由于细节方面需要额外的操作,所以我将引入的方法记录下来作为备忘录。
环境
-
- Docker v20.10
Laravel v6.20
Redis v6.2
phpredis v5.3
目录结构
├── laravel
├── infra
│ └─ php
│ └─ Dockerfile
└── docker-compose.yml
使用docker-compose.yml文件来定义Redis容器。
version: "3.8"
volumes:
php-fpm-socket:
services:
app:
build: ./infra/php
volumes:
- php-fpm-socket:/var/run/php-fpm
- ./laravel:/work/laravel
redis:
image: "redis:latest"
ports:
- "16379:6379"
在app容器中启用phpredis。
通过pecl通过安装phpredis软件包,在app容器中启用。
FROM php:7.4-fpm-buster
RUN apt update && \
apt -y install && \
pecl install redis && \
docker-php-ext-enable redis
WORKDIR /work/laravel
在这里需要注意的是,当执行`pecl install redis`时,并没有启用phpredis。
在这种情况下,即使使用Laravel的Redis Facade
PHP Error: Class 'Redis' not found in
/path/to/laravel/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php on line 75
出现了找不到\ Redis类的错误。
因此,在执行 `pecl install redis` 后,别忘了执行 `docker-php-ext-enable redis`。
设置.env文件中的REDIS_HOST
将Redis容器名称指定为.env文件中的REDIS_HOST。
APP_NAME=Laravel
...
REDIS_HOST=redis
从app.php的别名中删除Redis。
<?php
return [
//
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
//
'Redis' => Illuminate\Support\Facades\Redis::class, // これを削除かコメントアウトする
//
],
];
可以试着将数据从Laravel添加到Redis并确认。
首先,我们将从app容器中向Redis添加数据。
$ docker-compose exec app bash
:/work/laravel php artisan tinker
>>> use Illuminate\\Support\\Facades\\Redis;
>>> Redis::set("str", "test");
如果在Redis容器中保存了上述数据,则设置已完成。
$ docker-compose exec redis bash
:/data redis-cli
> keys *
1) "laravel_database_str" # デフォルトで"laravel_database"がプレフィックスとして付加される
> get laravel_database_str
"test"