🤖
DockerでRedisのコンテナを作成しLaravelと接続する
各バージョン
PHP 7.4
Laravel 8.47.0
macOS Catalina
Docker 20.10.7
Redisのコンテナの設定
docker-composeファイルに以下の内容を追加します。
docker-compose.yml
version: '3'
services:
redis:
image: redis:latest
container_name: redis
command: redis-server --appendonly yes
volumes:
- redis-volume:/data
ports:
- 6379:6379
volumes:
redis-volume:
動作確認
コンテナを立ち上げ、redisコンテナの中に入ります。
$ docker-compose up -d
$ docker exec -it redis /bin/bash
$ redis-server --version
Redis server v=xxx
#最新のバージョンが表示されるはずです。
$ redis-cli
127.0.0.1:6379> ping
PONG
#PONGが返ってくるようなら正常に動いています。
Redisクライアントの設定
LaravelでRedisを使用するには、
PhpRedis
か Predis
のどちらかのRedisクライアントをインストールする必要があります。
公式サイトでは パフォーマンスが高い PhpRedis
を使用することを推奨されています。
PhpRedis
を使用する場合
PHPのDockerfileに以下を追記します。
Dockerfile
FROM php:7.4-fpm
...
RUN git clone https://github.com/phpredis/phpredis.git /usr/src/php/ext/redis && \
docker-php-ext-install redis
redisのclientの初期設定でphpredisとなっているので特に変更は必要ありません。
database.php
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis')
]
Predis
を使用する場合
composerで predis
をインストールします。
$ composer require predis/predis
redisのclient設定を phpredisからpredisに変更します。
もちろん .envにてREDIS_CLIENTを追記しても設定可能です。
database.php
'redis' => [
- 'client' => env('REDIS_CLIENT', 'phpredis')
+ 'client' => env('REDIS_CLIENT', 'predis')
]
.env に以下の内容に変更します。
今回はSESSION_DRIVER を redisに変更します。
.env
SESSION_DRIVER=redis
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
動作確認
ブラウザからLaravelの認証機能でログインしてみてください。
redis-cliで確認すると、Redisにセッション情報が入っていることがわかります。
127.0.0.1:6379> keys *
1) "laravel_database_laravel_cache:xxxxxxxxxxxxxxxxxxxx"
セッション情報を削除後し、ブラウザを再読み込みするとログイン画面に戻されるはずです。
127.0.0.1:6379> del "laravel_database_laravel_cache:xxxxxxxxxxxxxxxxxxxx"
(integer) 1
127.0.0.1:6379> keys *
(empty array)
Discussion