このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0253

APC

 この項では、APCモジュールのインストール・設定と、CodeIgniterからAPCを利用する方法を 解説しています。

APCモジュールのインストール

 OSは「CentOS 5.x」、PHPのバージョンは「5.3.x」の環境でのAPCモジュールをインストールする手順です。

    # yum -y install php-pear pcre pcre-devel
    # pecl install apc
    

APCモジュールの設定

 APCモジュールのインストールが完了したら設定ファイル(/etc/php.d/apc.ini)を作成します。

 下記はサンプルですので、ご利用のサーバ環境などに合わせて適宜修正してください。

設定ファイル

  • /etc/php.d/apc.ini
  • extension=apc.so
    apc.cache_by_default = On
    apc.canonicalize = On
    apc.coredump_unmap = Off
    apc.enable_cli = On
    apc.enabled = On
    apc.file_md5 = Off
    apc.file_update_protection = 2
    ;apc.filters =
    apc.gc_ttl = 3600
    apc.include_once_override = Off
    apc.lazy_classes = Off
    apc.lazy_functions = Off
    apc.max_file_size = 1M
    ;apc.mmap_file_mask =
    apc.num_files_hint = 1000
    ;apc.preload_path =
    apc.report_autofilter = Off
    apc.rfc1867 = Off
    apc.rfc1867_freq = 0
    apc.rfc1867_name = APC_UPLOAD_PROGRESS
    apc.rfc1867_prefix = upload_
    apc.rfc1867_ttl = 3900
    apc.serializer = default
    apc.shm_segments = 1
    apc.shm_size = 1024M
    apc.slam_defense = On
    apc.stat = On
    apc.stat_ctime = Off
    apc.ttl = 3900
    apc.use_request_time = On
    apc.user_entries_hint = 4096
    apc.user_ttl = 3900
    apc.write_lock = On
    

動作確認

     ブラウザから「phpinfo()」 関数の出力結果で確認するか、 コマンドラインから動作確認できます。

     コマンドラインから確認する場合は、「apc.enable_cli」の設定値により、 出力結果が異なります。「apc.enable_cli」は、CLI(コマンドライン)からの APC利用を許可するか否かの設定です。

    $ php -i | grep APC
  • apc.enable_cli = Off
  • APC Support => disabled
    APC Debugging => Disabled
  • apc.enable_cli = On
  • APC Support => enabled
    APC Debugging => Disabled

APCドライバのロード

 「LOAD」オブジェクトの「driver()」メソッドで、APCドライバをロードします。

 第一引数に「cache」を指定し、第二引数には連想配列で、利用したいキャッシュドライバと それが利用できなかった場合の予備のキャッシュドライバを指定します。

    $this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));
    

APCドライバの機能

 キャッシュドライバの機能は、主に「キャッシュ情報の取得」、 「キャッシューデータのセット」、
「キャシュデータの削除」の3種類です。

is_supported('apc') 一番上に戻る

 指定したキャッシュドライバがシステムで利用できるか確認します。
 指定したキャッシュドライバが利用できる場合は「TRUE」、 利用できない場合は「FALSE」を返します。

    $this->load->driver('cache', array('adapter' => 'apc'));
    
    if ($this->cache->is_supported('apc')) {
        // APC キャッシングの利用が可能です。
    }
    else {
        // APC キャッシングは利用できません。
    }
    

cache_info() 一番上に戻る

 キャッシング情報を返します。
 返すデータはキャッシュドライバによって異なります。

    echo var_export($this->cache->cache_info(), TRUE);
    
    array (
      'num_slots' => 4099,
      'ttl' => 0,
      'num_hits' => 2,
      'num_misses' => 2,
      'num_inserts' => 3,
      'num_entries' => 1,
      'expunges' => 0,
      'start_time' => 1487443502,
      'mem_size' => 656,
      'file_upload_progress' => 1,
      'memory_type' => 'mmap',
      'cache_list' => 
      array (
        0 => 
        array (
          'info' => 'aaa',
          'ttl' => 600,
          'num_hits' => 0,
          'mtime' => 1487605303,
          'creation_time' => 1487605303,
          'deletion_time' => 0,
          'access_time' => 1487605303,
          'ref_count' => 0,
          'mem_size' => 656,
        ),
      ),
      'deleted_list' => 
      array (
      ),
      'slot_distribution' => 
      array (
        2829 => 1,
      ),
    )
    
    

save($key, $val, $ttl) 一番上に戻る

 キャッシュしたいデータをセットします。
 第一引数には、データを識別する「キー」を指定し、
 第二引数には、データを指定します。
 第三引数は、データをキャッシュする時間を秒単位で指定することができます。
 第三引数を指定しなかった場合のデフォルトは「60」となります。

    $id = $this->input->post('id');
    
    if ($my_data = $this->sample_model->get($id)) {
        
        $this->cache->save("my_data_{$id}", $my_data, 600);
        
    }
    

get($key) 一番上に戻る

 事前にキャッシュしたデータを取得します。
 引数には、キャッシュしたデータを識別する「キー」を指定します。

    $id = $this->input->post('id');
    
    if (! $my_data = $this->cache->get("my_data_{$id}")) {
    
        if ($my_data = $this->sample_model->get($id)) {
    
            $this->cache->save("my_data_{$id}", $my_data, 600);
    
        }
    
    }
    return $my_data;
    

get_metadata($key) 一番上に戻る

 引数で指定した「キー」のキャッシュデータ情報を返します。

expireこのキャッシュデータが削除される時間
mtimeこのキャッシュデータがセットされた時間
dataキャッシュされたデータ
    $this->cache->save('aaa', 'AAA', 600);
    
    echo var_export($this->cache->get_metadata('aaa'), TRUE);
    
    
    array (
      'expire' => 1487605903,
      'mtime' => 1487605303,
      'data' => 'AAA',
    )
    
    

delete($key) 一番上に戻る

 引数で指定した「キー」のキャッシュデータをキャッシュから削除します。

    if ($this->cache->delete('aaa')) {
        // キャッシュデータを削除しました。
        echo var_export($this->cache->get_metadata('aaa'), TRUE);
        // false 
    }
    else {
        // キャッシュデータの削除に失敗しました。
    }
    

clean() 一番上に戻る

 全てのキャッシュデータを削除します。

    if ($this->cache->clean()) {
        // キャッシュデータを削除しました。
    }
    else {
        // キャッシュデータの削除に失敗しました。
    }