Help us understand the problem. What is going on with this article?

PHPのキャッシュをRedisで行う

利用目的

キャッシュ機能にRedisを利用したい

環境

vagrant + Amazonlinux
PHP7 + cakePHP3
docker
redis

前提

vagrant、PHPの環境は既に利用できる設定となっている前提
各ツールに関する説明は各自で調べてください。

利用ツール

docker
docker-compose
redis
phpredis

手順

①dockerのインストール

yumパッケージのアップデート

sudo yum update -y

dockerのインストール

sudo yum install -y docker

dockerのインストール確認

sudo docker --version

dockerのサービス開始

sudo service docker start

現在のグループと所属ユーザを確認

getent group

指定ユーザをdockergroupに所属させる

sudo usermod -a -G docker [指定ユーザ]

指定ユーザがdockerグループに所属したことを確認

getent group

一度ログアウトすることで、グループを再読み込みする

exit

②docker-composeのインストール

一度スーパーユーザになる

sudo -i

スーパーユーザでdocker-composeをインストール

curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

docker-composeの実行権を確認

ls -l /usr/local/bin/

docker-composeコマンド に実行権付与

chmod +x /usr/local/bin/docker-compose

docker-composeの実行権付与を確認

ls -l /usr/local/bin/

スーパーユーザを抜ける

exit

docker-composeのインストール確認

docker-compose --version

③Redisのdockerコンテナを作成

※置く場所は任意で決めてください。
 今回はプロジェクト内に作成

└── プロジェクトフォルダ
└── docker
   ├── docker-compose.yml ※1
   └── redis
   └── data

※1 docker-compose.ymlは、Redisインストールのために必要なため、
  自分で作成してください。

docker-compose.yml
version: '3'
services:
  redis:
    image: redis:latest
    volumes:
        - ./redis/data:/data
    command: redis-server --appendonly yes
    ports: ["6379:6379"]

docker-compose.ymlが置いてあるフォルダまで移動

cd プロジェクトフォルダ/docker

redisをインストール (dockerは先に起動した状態であること)

docker-compose up -d
※-dはバックグラウンド実行

redisコンテナが生成されていることを確認

docker ps -a

③phpredisのインストール

※本当はyumでインストールしたかったのですが、うまくいかなかったので
makeして直接インストールを実行

インストール先に移動

(各プロジェクトに沿って決めてください。)
cd /usr/local/src/

phpredisをGitから取得

sudo git clone git://github.com/nicolasff/phpredis.git

インストール作業

cd phpredis
sudo phpize
sudo ./configure
sudo make test
sudo make install test

php.iniの設定変更

PHPの設定確認

php -i | grep -e redis -e Redis

php.iniの場所を検索

php -i | grep php.ini
(上記のphp.iniパスコピー)

php.iniの編集

sudo vi [上記で見つけたパス]/php.ini

最終行に以下を追加

extension=redis.so

php設定反映確認

php -i | grep -e redis -e Redis

server,phpfpmの再起動

これは各環境に沿って実行してください。
私の環境では、nginxを利用していたので、下記の命令となります。
sudo service nginx stop
sudo service nginx start
sudo service php-fpm stop
sudo service php-fpm start

④dockerコンテナ内のredisへの接続確認

redisの接続ポートを確認

docker ps -a

redis-cliの場所を確認

sudo find /* -name redis-cli

redisへの接続確認

sudo [上記find命令のredis-cliのパス] -p [docker ps -a で確認したポート番号]

接続確認が取れたら接続を解除

exit

⑤プロジェクト内のapp.configを修正

Cacheのデフォルト設定をcakePHPからRedisに書き換える

app.config
        'default' => [
            'prefix'  =>  '' ,
            'engine' => 'Redis',
            'server' => '127.0.0.1',//ローカルホスト
            'port' => 6379,
        ],

⑥疎通確認

CakePHPを通して、Redisにアクセスできるかを確認する

任意のPHPファイルに以下のソースを記載して確認

    try {
        Cache::write("2000", 1515);
        $redis_read = Cache::read("2000");

        //読みだしたキャッシュが有効か
        if($redis_read === false){
            echo "無効なキャッシュです";
        }else{
            var_dump($redis_read);
        }
    } catch (Exception $exception) {
        $this->log(print_r($exception),LOG_ERR);
    }

※画面上に1515が表示されれば疎通確認はOKです。

備忘録

動かない時に確認すること

①dockerは動いてる?

sudo service docker start
sudo service docker stop

②redisのdockerContainerは動いている?

docker ps -a
starusのところが「Up」なら動いている。「Exited」なら止まっている。

③redisのdockerContainerを起動させるとき、docker-composeを使って起動した?

docker [containerID] startで開始すると稀におかしなことになることがあった。

④PHPにredisの設定が反映されてる?

php -m | grep -e redis -e Redis
Redisの設定っぽいのが出てくればOK
そんなん知らんよ的なメッセージが出たら反映されていない。
反映されていない場合確認すること
①Phpredisのインストールは成功しているか確認
sudo find / -name redis.so
redis.soが出てくれば、大体成功している。
②php.iniにredis設定の書き込みをしたか確認

上のことを解決すれば大体は大丈夫なはず・・・。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away