使用Docker搭建Redis容器,在Laravel中进行读写操作

首先

我在Docker上启动了Redis容器并在Laravel中进行了读写操作,因此我将介绍最简单的配置步骤来启动Redis容器。

想做的事情

    • DockerでRedisコンテナを立ち上げたい

 

    • Redisのデータを永続化したい

 

    LaravelからRedisのデータを読み書きしたい

在这篇文章中未进行解释的内容。

    • Redis以外のDocker構成

 

    Laravelのインストール手順

目录结构

.
├── data
│   └── redis
│       └── appendonly.aof(コンテナ起動時に作成されます)
├── docker-file
│   ├── nginx
│   │   └── default.conf
│   └── php
│       ├── Dockerfile
│       └── php.ini
├── volumes
│   └── www
└── docker-compose.yml

每个文件的内容 (gè de

docker-compose.yml 的汉语释义是:Docker 组合配置文件。

为了持久化数据,我们将data文件夹挂载上去。

此外,为了避免每次重启Redis容器都会更改IP地址而不方便,我们使用networks来分配静态IP。

version: '3.3'

services:
  php:
    container_name: php
    build: ./docker-file/php
    volumes:
      - ./volumes/www:/var/www
    networks:
      app_net:
        ipv4_address: 172.16.238.2

  nginx:
    image: nginx
    container_name: nginx
    ports:
      - 8080:80
    volumes:
      - ./volumes/www:/var/www
      - ./docker-file/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
    networks:
      app_net:
        ipv4_address: 172.16.238.3

  redis:
    image: "redis:latest"
    container_name: redis
    ports:
      - "6379:6379"
    command: redis-server --appendonly yes
    volumes:
      - "./data/redis:/data"
    networks:
      app_net:
        ipv4_address: 172.16.238.4

networks:
  app_net:
    driver: bridge
    ipam:
     driver: default
     config:
       - subnet: 172.16.238.0/24

docker-file/nginx/default.conf 的中文原生語言寫法:

docker 文件夾/nginx/default.conf

server {
  listen 80;

  root  /var/www/public;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php$is_args$args;
  }

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass   php:9000;
    fastcgi_index  index.php;

    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO $fastcgi_path_info;
  }
}

docker文件/php/Dockerfile

因为在PhpRedis PHP扩展中推荐使用公式的建议,所以我正在进行phpredis的git克隆。

建议在Laravel中使用Redis时,使用PECL安装PhpRedis PHP扩展。安装过程较复杂,但对于大量使用Redis的应用程序来说,可以获得更好的性能。

FROM php:7.3-fpm
COPY php.ini /usr/local/etc/php/

RUN apt-get update \
  && apt-get install -y zlib1g-dev libzip-dev libpq-dev iputils-ping net-tools git
RUN git clone https://github.com/phpredis/phpredis.git /usr/src/php/ext/redis
RUN docker-php-ext-install zip pgsql pdo_pgsql redis

COPY --from=composer /usr/bin/composer /usr/bin/composer

ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin

WORKDIR /var/www

RUN composer global require "laravel/installer"

Dockerfile中的php.ini文件。

[Date]
date.timezone = "Asia/Tokyo"

[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

执行

使用Docker Compose进行启动。

$ docker-compose up -d
Creating network "redis-docker_app_net" with driver "bridge"
Creating php   ... done
Creating redis ... done
Creating nginx ... done

使用Laravel进行读写操作

您需要配置config/database.php,但基本上保持初始设置即可,没有问题。
参考:Redis 6.x Laravel

写入、读取

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Redis;

class RedisController extends Controller
{
    /**
     * Redisへデータをセット
     */
    public function setRedis($id)
    {
        Redis::set('test', $id);

        return;
    }

    /**
     * Redisのデータを取得
     */
    public function getRedis()
    {
        $redis_data = Redis::get('test');

        return;
    }
}

删除Redis数据

这个命令是参考以下网站的:
参考:删除Redis数据的方法。

$ docker exec -it redis /bin/bash
root@7c462a072597:/data# redis-cli
127.0.0.1:6379> flushdb
OK
bannerAds