12
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vagrant に redis をインストールし FuelPHP で cache 利用

Last updated at Posted at 2014-12-02

前回、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ドキュメント

Cache
Redis

まずは 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
app/classes/controller/redis.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));
    }
}
app/views/cache/redis.php
<!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>
app/classes/object.php
<?php

class Object
{
    public static function _init()
    {
    }

    public function __toString()
    {
        return 'Object';
    }
}

これで準備完了です。

FuelPHP で cache セット及び確認

それでは、アクセスしてみましょう。http://192.168.33.01/redis (IPはvagrantの各自設定に従ってください。)
kobito.1417490506.497065.png

セットした String, Array, Object が表示されていれば成功です。

Redis の cache をクリアして cache だけ参照

ここで cache へアクセスできなかったケースを見てみましょう。次のファイルを準備します。

  • Controller
    • app/classes/controller/redis2.php
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 にアクセスしますと、次のような結果になります。
kobito.1417490801.144532.png

まとめ

ここまで Redis のインストールから、FuelPHP での操作方法を少し試してみました。とても簡単に試すことができました。特に違和感なく利用できるのが本当に頼もしいところです。

本番で利用する際には、サービス規模にもよりますが、AWS の ElasticCache(ElastiCacheのRedisクラスターにバックアップとリストア機能が追加) を利用するなどでしょうか。

cache の設計と利用を効率良く実施し、サービスのパフォーマンスを向上させたいですね。

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?