在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"
广告
将在 10 秒后关闭
bannerAds