RedisPHPITCakePHP

cakePHP2.x系からRedisにキャッシュする

session管理をRedisで行う等の使用方法が良く見られますが。ここでは、Redisにキャッシュする手順を解説します。 cakephpでは、Redisへのキャッシュをサポートしているので、比較的簡単に行うことができます。 まずは、サーバにRedisをインストールするために https://took.jp/2019/08/17/cakephp2-xからredisを利用する%e3%80%80phpredisのインストール手順/ の手順を行ってください。 上記の手順が完了したところから説明していきます。

cakePHPからRedisを利用しよう

Redisを使用する方法は二通りあります。 一つ目は、インストール手順の記事にも書いてあった、

$host = '127.0.0.1';
$port = 6379;
$r = new Redis();
$r->connect($host, $port);
$r->set("foo","bar");
var_dump($r->get("foo"));

のような呼び出し方です。 二つ目は、cakephpで用意されたCacheを利用する方法です。 プロジェクト/app/Config/bootstrap.phpに以下を追加することで使用できるようになります。

Cache::config('redis', array(
   'engine'      => 'Redis',
   'server'      => '127.0.0.1',
   'port'    => 6379,
));

追加したら、controllerに $aaa = Cache::write(‘keynamea’, ‘value’,‘redis’); var_dump($aaa); を記述し、動かしてみましょう。 Cache::writeの第三引数では、使用するエンジン名を決めており、Cache.phpからRedisEngine.phpが呼び出され、phpredisで定義済みのコマンドが呼び出されます。 Cache::write が Redisでいうsetコマンド Cache::read が getコマンドになります。 プロジェクト/lib/Cake/Cache/Engine/RedisEngine.phpを見てもらうとわかるのですが、msetコマンドなどは実装されていないため、自分で追加してあげる必要があります。 追加方法は別記事で紹介いたします。 mset等が使えないということは、Redisの本来のパフォーマンスを引き出すことができないので、追加することをお勧めします。

大文字、小文字を区別させる

cakePHPで用意されたCacheの初期の設定では、小文字大文字を区別しない(すべて小文字に変換して登録、取得している)ようです。 プロジェクト/lib/Cake/Cache/Cache.php にある $key = self::$_engines[$config]->key($key); という部分で、小文字になっているようでした。 指定されたconfigによってKeyを置き換えるようでしたが、 ・大文字小文字の区別をしないという設定がわからなかった ・特に使用していない部分 だったため、処理をコメントアウトしてしまいました。 もし、同じようにコメントアウトする場合は、 writeメソッドだけをコメントアウトして、readメソッドの記述を忘れていたなんてことになると、呼び出しに失敗する原因となるので、ファイル内の同一の記述をすべてコメントアウトしておきましょう。