前回、FuelPHP で Welcome ページ参照までを行いました。今回は、cache 機構に Redis を使ってみたかったので、基本的なことですが、MacBookAir の Vagrant 内で検証してみました。
構築する環境
- OSX 10.9.5
- Vagrant
- CentOS 6.5
- FuelPHP 1.7.2
- Redis server 2.4.10
- Redis-cli 2.4.10
参考: 前回
前回、Welcomeページまでセットした環境の続きとして実行しています。
Mac 上で Vagrant を使って CentOS に FuelPHP をセットアップ
参考:Redis まわり
Redis のインストールや操作は下記を参考にさせていただきました。
CentOS-6.5でredisサーバ構築
FuelPHPのキャッシュライブラリ – redis編
参考:日本語FuelPHPドキュメント
まずは Redis インストール
vagrant 内でのコマンドですので、全て[vagrant]としてコマンドラインを表現しています。
[vagrant] yum --enablerepo=epel install redis
...
...
Complete!
特に違和感なくインストールされました。
それでは Redis server を start します。
[vagrant] /etc/init.d/redis start
Starting redis-server: [ OK ]
次にバージョンを確認してみます。まずは server のバージョン。
[vagrant] redis-server -v
Redis server version 2.4.10 (00000000:0)
次に client のバージョン
[vagrant] redis-cli -v
redis-cli 2.4.10
次に動作確認をします。client を起動し簡易的に確認です。
[vagrant] redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> set hoge 'foo'
OK
redis 127.0.0.1:6379> get hoge
"foo"
セットしたデータが取得できていますので問題無さそうです。
一旦、セットしたデータを全てクリアしておきましょう。
[vagrant] redis-cli
redis 127.0.0.1:6379> flushall
OK
redis 127.0.0.1:6379> get hoge
(nil)
これでクリアが完了しました。
FuelPHP の準備
下記ファイルを準備していきます。
- Controller
- app/classes/controller/redis.php
- View
- app/views/cache/redis.php
- 使用するClass
- app/classes/object.php
<?php
class Controller_Redis extends \Fuel\Core\Controller
{
public function action_index()
{
// string
Cache::set('string', 'cache test' . Date::time());
$data['string'] = Cache::get('string');
// Array
$arr = array(
1,
2,
array(
'key' => 'value',
'key2' => 'value2',
'time' => Date::time(),
)
);
Cache::set('array', $arr);
$data['array'] = Cache::get('array');
// Object
$obj = new Object();
Cache::set('object', $obj);
$data['object'] = Cache::get('object');
return Response::forge(View::forge('cache/redis', $data));
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Cache: Redis</title>
</head>
<body>
<p>Cache: Redis</p>
<div>String:<?php var_export($string) ?></div>
<div>Array :<?php var_export($array) ?></div>
<div>Class :<?php var_export($object) ?></div>
</body>
</html>
<?php
class Object
{
public static function _init()
{
}
public function __toString()
{
return 'Object';
}
}
これで準備完了です。
FuelPHP で cache セット及び確認
それでは、アクセスしてみましょう。http://192.168.33.01/redis (IPはvagrantの各自設定に従ってください。)
セットした String, Array, Object が表示されていれば成功です。
Redis の cache をクリアして cache だけ参照
ここで cache へアクセスできなかったケースを見てみましょう。次のファイルを準備します。
- Controller
- app/classes/controller/redis2.php
<?php
class Controller_Redis2 extends \Fuel\Core\Controller
{
public function action_index()
{
try{
$data['string'] = Cache::get('string');
}
catch (\CacheNotFoundException $e) {
$data['string'] = 'none string';
}
try{
$data['array'] = Cache::get('array');
}
catch (\CacheNotFoundException $e) {
$data['array'] = 'none array';
}
try{
$data['object'] = Cache::get('object');
}
catch (\CacheNotFoundException $e) {
$data['object'] = 'none object';
}
return Response::forge(View::forge('cache/redis', $data));
}
}
キャッシュが取得できない場合は、CacheNotFoundException の Exception が発行されるため、こちらで処理を追加しておきます。
この状態で、http://192.168.33.01/redis2 にアクセスしますと、先ほどと同じ結果が表示されるはずです。
ここで、一旦、Redis の中身をクリアしてみましょう。
[vagrant] redis-cli
redis 127.0.0.1:6379> flushall
OK
redis 127.0.0.1:6379> get hoge
(nil)
そして、再度、http://192.168.33.01/redis2 にアクセスしますと、次のような結果になります。
まとめ
ここまで Redis のインストールから、FuelPHP での操作方法を少し試してみました。とても簡単に試すことができました。特に違和感なく利用できるのが本当に頼もしいところです。
本番で利用する際には、サービス規模にもよりますが、AWS の ElasticCache(ElastiCacheのRedisクラスターにバックアップとリストア機能が追加) を利用するなどでしょうか。
cache の設計と利用を効率良く実施し、サービスのパフォーマンスを向上させたいですね。