Memcached
サーバ・クライアント型であるオープンソースのキャッシュサーバ 「Memcached」」 を利用したデータキャッシングの利用方法を解説します。
CodeIgniterでMemcachedにアクセスするには、PECL拡張モジュールである「memcached.so」
モジュールを利用します。
そのため、PHPのバージョンは「5.2.0」以上でないと利用できません。
Memcachedモジュールのインストール
CentOS等のRedHat系Linux(ver5)で、Memcached拡張モジュールをインストールする参考手順です。
# rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm # rpm -ivh http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm # yum install libmemcached.x86_64 libmemcached-devel.x86_64 zlib-devel # rpm -qa |grep libmemcached libmemcached-devel-1.0.4-3.el5 libmemcached-1.0.4-3.el5 # yum install php-pear pcre-devel # pecl install memcached-1.0.2
Memcachedモジュールの設定
Memcached拡張モジュールを有効にするためのPHPの設定です。
設定ファイル
- /etc/php.d/memcached.ini
extension=memcached.so
動作確認
libmemcached version => 1.0.4
Memcachedドライバの設定
Memcachedサーバにアクセスするための CodeIgniter の設定です。
hostname | Memcachedサーバのホスト名または、IPアドレスを指定します。 |
port | MemcachedサーバのTCPポート番号を指定します。 |
weight | 複数のMemcachedサーバを利用する場合、対象のサーバの重みを指定します。 |
- config/memcached.php
<?php $config['memcached'] = array( 'server1' => array( 'hostname' => '10.0.0.101', 'port' => 11211, 'weight' => 70, ), 'server2' => array( 'hostname' => '10.0.0.102', 'port' => 11211, 'weight' => 30, ), );// 上の例では70%の確率で「server1」、30%の確率で「server2」に接続されます。
本番環境、テスト環境、開発環境ごとにMemcachedサーバを分けて設定することができます。
- config/development/memcached.php
- config/testing/memcached.php
- config/production/memcached.php
Memcachedドライバのロード
「LOAD」オブジェクトの「driver()」メソッドで、Memcachedドライバをロードします。
第一引数に「cache」を指定し、第二引数には連想配列で、利用したいキャッシュドライバと それが利用できなかった場合の予備のキャッシュドライバを指定します。
$this->load->driver('cache', array('adapter' => 'memcached', 'backup' => 'file'));
Memcachedドライバの機能
キャッシュドライバの機能は、主に「キャッシュ情報の取得」、
「キャッシューデータのセット」、
「キャシュデータの削除」の3種類です。
is_supported('memcached') 一番上に戻る
指定したキャッシュドライバがシステムで利用できるか確認します。
指定したキャッシュドライバが利用できる場合は「TRUE」、
利用できない場合は「FALSE」を返します。
$this->load->driver('cache', array('adapter' => 'memcached')); if ($this->cache->is_supported('memcached')) { // Memcached キャッシングの利用が可能です。 } else { // Memcached キャッシングは利用できません。 }
cache_info() 一番上に戻る
キャッシング情報を返します。
返すデータはキャッシュドライバによって異なります。
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);
delete($key) 一番上に戻る
引数で指定した「キー」のキャッシュデータをキャッシュから削除します。
if ($this->cache->delete('aaa')) { // キャッシュデータを削除しました。 echo var_export($this->cache->get_metadata('aaa'), TRUE); // false } else { // キャッシュデータの削除に失敗しました。 }
clean() 一番上に戻る
全てのキャッシュデータを削除します。
if ($this->cache->clean()) { // キャッシュデータを削除しました。 } else { // キャッシュデータの削除に失敗しました。 }