FuelPHPのキャッシュライブラリの各メソッドの使用方法


FuelPHPのCacheライブラリには以下の4つのメソッドが5つのメソッドがドキュメントに載っている

  • set
  • get
  • delete
  • delete_all
  • call

それぞれの関数がどのように動作するか確認していきます。

setメソッド

set($identifier, $contents = null, $expiration = false, $dependencies = array())

上記例では、expiration、dependenciesは使用しなかったのでどのように動作するか確認、

まずは、expiration、キャッシュの有効期間を指定してみる

  public function action_cache2()
  {
    // String
    Cache::set('string', 'cache expiration test', 2);
    $data['one'] = Cache::get('string');
    sleep(3);
    $data['three'] = Cache::get('string');

    $this->template->title = 'Test » Cache';
    $this->template->content = View::forge('test/cache2', $data);
  }

わざと、キャッシュの有効期限が切れるように3秒のsleepを入れてからキャッシュの取得を行うと

CacheExpiredExceptionが発生!

なるほど、FuelPHPでは、基本想定しない動作をするとExceptionで通知する仕組みのようだ。

ということでtry-catchを記入する

    // String
    Cache::set('string', 'cache expiration test', 2);
    $data['one'] = Cache::get('string');
    sleep(3);
    try {
      $data['three'] = Cache::get('string');
    } catch (CacheExpiredException $ex) {
      $data['three'] = $ex;
    }

    $this->template->title = 'Test » Cache';
    $this->template->content = View::forge('test/cache2', $data);

こんな感じで実行結果は

なるほど、なんかJavaを使ってた頃を思い出す…なつかしいけどこのこの感じ好きだ!

キャッシュの有効期限たキーを呼び出すと対象のキャッシュをdeleteしてからExceptionを呼んでるみたいなのでキャッシュのファイルはなくなっていました。

内容を確認する為に作りっぱなしにしてみた

{{Fuel_Cache_Properties}}{"created":1322413708,"expiration":1322413710,"dependencies":[],"content_handler":"string"}{{/Fuel_Cache_Properties}}cache expiration test

予想通り、expirationにtime()関数の結果をいれている模様。

今の時間がexpirationを過ぎていないかチェックして時間が経過していた場合にエラーとしていました。

次に「dependencies」これは、予想と動作が少し違ったので

coreのファイルの中を除いてみた、すると次のような事が分かった

キャシュにdependenciesが指定されていた場合、

  • dependenciesで指定された、キーのキャッシュが存在しない。
  • dependenciesで指定された、キーのキャッシュが元のcreatedより新しい(秒単位での比較で>)

が成立するとExceptionが発生する。

Fileストレージを選択した場合、dependenciesのキャッシュの中のcreatedやexpiration、dependeciesは、見てなくてファイルの作成日時を取得して比較していました。

面白いけど、秒単位での比較となるとうーん、微妙。。。

マイクロ秒で比較して欲しいと思うのですが、それでも正直微妙かもですが。

面白いけど、自分なら正直使わないかな。

 getメソッド

get($identifier, $use_expiration = true)

こちらでは「use_expiration」を使ってみる。

ソースはこんな感じ

  public function action_cache4()
  {
    // String
    Cache::set('string', 'cache expiration test', 2);
    sleep(3);
    $data['one'] = Cache::get('string', false);

    $this->template->title = 'Test » Cache';
    $this->template->content = View::forge('test/cache3', $data);
  }

動作は、「use_expiration」にfalseを設定すると有効期間を無視するように設計されていた。

2秒でキャッシュが無効になるところが3秒後にキャッシュデータを取得できた。

柔軟にキャッシュを扱えそうだ。

deleteメソッド

delete($identifier)

まず試してみる

ソースは

  public function action_cache_del()
  {
    // String
    Cache::set('string', 'cache expiration test');
    Cache::delete('string');
    $data['one'] = Cache::get('string');

    $this->template->title = 'Test » Cache';
    $this->template->content = View::forge('test/cache3', $data);
  }

こんな感じ

で、結果は

エラーが発生!!

deleteの次のgetでエラーが発生ちゃんとキャッシュのキーを元にキャシュ情報が削除されている模様

delete_allメソッド

delete_all($section = null, $driver = null)

試してみる、ソースは以下のような感じ

  public function action_cache_alldel()
  {
    // String
    Cache::set('string', 'cache expiration test');
    Cache::delete_all();

    $this->template->title = 'Test » Cache';
    $this->template->content = View::forge('test/cache3', $data);
  }

実行後にキャッシュのフォルダを除いてみると、
今まであった全てのキャッシュ情報が削除されました。

callメソッド

call($identifier, $callback, $args = array(), $expiration = null, $dependencies = array())

これは、何に使うんだろう???と謎だったのでソースよんでみました。

第1引数で渡したキーの値でキャッシュに問い合せて、

存在しなかったら、第2引数、第3引数を使用してPHPの「call_user_func_array」関数を呼び出す。

取得出来た結果をキャッシュに保存し、処理結果として呼び出し元に戻すという処理になっていた。

これは、これで中々の機能で面白い!!

FuelPHPでキャッシュを使用するならこのメソッドはかなりオススメなメソッドです。

長くなりましたが、

Fileでのキャッシュと各メソッドの機能を調べた結果でした。

次回は、APCでのキャッシュの方法を調べたいと思います。

関連する記事:

Facebookでコメント

コメント

  1. コメント 0

  1. トラックバック 0

*

return top