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設定の書き込みをしたか確認

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