ドキュメント
リリースカレンダー
リンク
SourceForge.jp SourceForge.JPへ
php.net PHP公式サイトへ

キャッシュ

 キャッシュは、負荷の高い処理やネットワークなどの要因により時間がかかる処理の結果を、 一時的にサーバー内保存して再利用することにより、サーバー負荷とレスポンス時間を短縮させる機能です。

一定時間結果を保持するので、リアルタイム性を求められるアプリケーションには向かないですが、 大概、そのようなことを求められることは稀なので、速度的にボトルネックになると感じた場合は、 1つの解決策にとして検討してみてはどうでしょうか。

1. キャッシュの種類

SyLフレームワークで使用できるキャッシュの種類は、下記の3つあります。

キャッシュの種類
ファイルキャッシュ
DBキャッシュ
memcache

使い方は、ほぼ同一のインターフェイスなので、使用する側はあまり違いを意識する必要はないと思います。

2. キャッシュコード例(共通)

 ファイルキャッシュのコード例を下記に示します。

// フォームクラスインクルード
// ※SyL外で使用する際は、直接インクルードしてください
//   -> SYL_DIR /SyL/include/lib/SyL_Cache.php
SyL_Loader::lib('Cache');

$cache =& SyL_Cache::factory();
// キャッシュを判別するためのキー
$cache->setKey('cache_key1');
// キャッシュファイルの有効時間
$cache->setLifeTime(60);

$data = $cache->read();
if ($data) {
  echo date("H:i:s") . " キャッシュ OK\n";

  print_r($data);
} else {
  echo date("H:i:s") . " キャッシュ NG\n";

  $data = "キャッシュテストデータ\n";
  $cache->write($data);
}

 factory メソッド(デフォルト: ファイルキャッシュ)で、キャッシュオブジェクトを作成してから、 いくつかプロパティをセットし、read メソッドで読み込みます。読み込みが成功すれば、 取得したキャッシュを使用し、取得できなければ次回使用されるように write メソッドで保存します。
※ キャッシュが無い場合、厳密には false が返されます。

 setKey メソッドで指定したキー値に対して、キャッシュデータが、1 : 1 で管理されます。 複数リクエストでも、キー値が同じであれば同一のキャッシュ(データ)が参照されます。

 setLifeTime メソッドで、キャッシュの有効時間を秒単位で指定します(例では 60 秒)

 また、不要になったキャッシュを自動で削除するGC(ガベージコレクト)を%単位で起動させることも可能です(memcache以外)。 以下のような gc メソッドで指定します。(デフォルトは、GC無し)

// GCの%
$cache->gc(1);

3. ファイルキャッシュ特有

 ここでは、ファイルキャッシュ特有の使用方法について記述します。

保存ディレクトリ

 ファイルキャッシュを保存するディレクトリを指定します(デフォルト: /tmp)。実行ユーザーが書き込めるディレクトリを指定してください。

// キャッシュファイルの保存ディレクトリ
$cache->setCacheDir('/tmp/test');

ファイルキャッシュの接頭辞

 ファイルキャッシュ名に対する接頭辞を指定できます。保存されているファイルキャッシュが視覚的に判別しやすくなったり、GCの有効範囲を局所化できます。

// キャッシュファイル名の接頭辞
$cache->setPrefix("CACHE_TEST_");

4. DBキャッシュ特有

 DBキャッシュを使用するには、事前に対象のDBに接続できることの確認と、「DB接続文字列」「キャッシュテーブル」を定数で定義する必要があります。 (DB接続に関しては、「7.1 DB」参照)

 「DB接続文字列」の定数(SYL_DB_DSN_CACHE)は下記にように定義します。 (SyLフレームワークを使用している場合は、defines.xml の SYL_DB_DSN 定数も参照されます。)

define('SYL_DB_DSN_CACHE', 'pgsql:dbname=your_db;host=localhost;port=5432;
user=your_name;passwd=your_password;client_encode=EUC-JP');

 「キャッシュテーブル」のスキーマは下記のような構成を想定しており、テーブル名やカラム名は SYL_CACHE_DB_TABLE 定数で指定します。

// 想定スキーマ
create table syl_cache ( 
   cache_id      varchar(50) not null, 
   cache_expires int not null, 
   cache_data    text,
   primary key (cache_id)
);

define('SYL_CACHE_DB_TABLE', 'syl_cache:cache_id:cache_data:cache_expires');

5. memcache特有

 memcache を使用するには、事前に memcache拡張モジュールがインストールされていることを確認し、「memcache接続文字列」を定数で定義します。 (デフォルトは、localhost:11211 となります。)

define('SYL_CACHE_MEMCACHE_HOST', 'localhost:11211');

圧縮フラグ

 memcache 圧縮を使用する場合は、セットしてください。(デフォルト使用しない)

$cache->setCompress(MEMCACHE_COMPRESSED);