前の記事 ≪:symfonyの携帯絵文字プラグイン
次の記事 ≫:シンプルなWYSIWYGエディタ作成用JSライブラリ「jWYSIWYG」

PHPでパフォーマンス向上のためのキャッシュテクニック色々

2008年03月03日-はてなブックマーク

スポンサード リンク

PHP Performance Series: Caching Techniques - Mike Willbanks : getting into the mind of a php developer.

PHPでパフォーマンス向上のためのキャッシュテクニック色々が紹介されていました。
取得に時間のかかるデータはキャッシングで高速化、は当たり前の処理ですが、その方法もいろいろあり、コードが紹介されていたので解説

apc によるキャッシング方法( APCの説明 )
APCはPHPのコードを共有メモリなどに中間形式にキャッシュしておいてPHPの実行速度を上げるための仕組みです。
そのAPCエクステンションを有効にすると、データをキャッシュしておくためのAPIも提供されます。

<?php
if (($config = apc_fetch('config')) === false) {
    require(
'/path/to/includes/config.php');
    
apc_store('config', $config);
}

apc_fetch, apc_storeを使っていますが、apc_delete というキャッシュを削除するAPIもあります。

apcは、pecl install apc などでインストールできます。
XAMPPの場合は「XAMPPでcurlやopensslなどのPHPエクステンションを有効にする方法」を参考に extension=php_apc.dll を有効にする。

cache_liteによるキャッシング
PEARのCache_Liteを使ったファイルベースでのキャッシュ方法。

<?php
require('/path/to/pear/Cache/Lite/Output.php');

$options = array(
    
'cacheDir' => '/tmp/',
    
'lifeTime' => 10
);

$cache = new Cache_Lite_Output($options);

if (!(
$cache->start($_SERVER['REQUEST_URI']))) {
    require(
'/path/to/bootstrap.php');
    
$cache->end();
}

PEARのCache_Liteを使うことでファイルベースのキャッシュが超シンプルになります。

Cache_Lite クラスも存在するのですが、ここではCache_Lite_Outputで出力全体をキャッシングしています。
Cache_Liteのサンプルコードは拙著でも紹介しています。

Memcachedによるキャッシング
高負荷なサイトでも多々実績のあるキャッシュデーモンのmemcachedをPHPから使うサンプルです。
別途memcachedデーモンをインストールし、phpのmemcacheエクステンションを有効にする必要があります。

<?php
$post_id = (int) $_GET['post_id'];
$memcached = new Memcache;
$memcached->connect('hostname', 11211);
if ((
$row = $memcached->get('post_id_' . $post_id)) === false) {
    
//yes this is safe, we type casted it already ;)
    
$rs = mysql_query('SELECT * FROM post WHERE post_id = ' . $post_id);
    if (
$rs && mysql_num_rows($rs) > 0) {
        
$row = mysql_fetch_assoc($rs);
        
// cache compressed for 1 hour
        
$memcached->set('post_id_' . $post_id, $row, MEMCACHE_COMPRESSED, time() + 3600);
    }
}
var_dump($row);

memcachedに接続して、データの取得、設定をシンプルにget,setメソッドで行えます。
デーモンを叩くので他の言語のプログラムとキャッシュを共有したい場合にも使えますね。

apcの時同様、memcacheエクステンションは、pecl install memcacheなどでインストールできます。
XAMPPの場合は「XAMPPでcurlやopensslなどのPHPエクステンションを有効にする方法」を参考に extension=php_memcache.dll を有効にする。

関連エントリ

関連の記事検索:PHP, cache, キャッシュ, 高速化, Memcached, performance
スポンサード リンク

By.KJ : 2008年03月03日 07:08 livedoor Readerで購読 Twitterに投稿

間違いの指摘をしていただける方はメール、あるいはTwitter/FBでお願いします(クリック)