Symfoware

Symfowareについての考察blog

CodeIgniter 3 キャッシュドライバーの使用方法(Library Reference - Caching Driver)

CodeIgniter User Guide

Library ReferenceのCaching Driverについて調べてみます。
Caching Driver



Caching Driver



CodeIgniterは一般的なキャッシュシステムのラッパーを提供しています。
しかし、使おうとしたキャッシュシステムにサーバーが対応していない場合は、
例外を発生させます。



Example Usage



APCキャッシュを使用する例です。もしAPCキャッシュが有効でない場合、
バックアップとしてファイルによるキャッシュを行います。


  1. $this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));
  2. if ( ! $foo = $this->cache->get('foo'))
  3. {
  4.     echo 'Saving to the cache!<br />';
  5.     $foo = 'foobarbaz!';
  6.     // Save into the cache for 5 minutes
  7.     $this->cache->save('foo', $foo, 300);
  8. }
  9. echo $foo;





キャッシュにデータを登録するときのキーのプレフィックスを付けたい場合、
「key_prefix」で指定します。


  1. $this->load->driver('cache',
  2.     array('adapter' => 'apc', 'backup' => 'file', 'key_prefix' => 'my_')
  3. );
  4. $this->cache->get('foo'); // Will get the cache entry named 'my_foo'







Drivers



使用可能なキャッシュは以下のとおり。

・Alternative PHP Cache (APC) Caching
APCを利用したキャッシュです。

・File-based Caching
ファイルにキャッシュデータを保存します。

・Memcached Caching
Memcachedにデータを保存します。

・WinCache Caching
Windowsのキャッシュを利用します。

・Redis Caching
Redisにデータを保存します。

・Dummy Cache
ダミーのキャッシュです。
実際にはキャッシュは行われず常にキャッシュは失敗するようです。
テスト時、キャッシュに失敗した時の処理が正常に行われるかのテスト用みたいです。




Memcached Caching



例として、Memcachedをキャッシュに使用してみます。
DebianにMemcachedとPHPの接続ライブラリをインストールしておきました。
Debian 7にapt-getでmemcachedをインストールし、php5から接続する

インストールしたら、php-fpmを再起動しておきます。


# service php5-fpm restart



※しばらくMemcachedのライブラリが読み込めていなくてはまりました。
nginxの再起動しても意味無いですよね・・・



Memcachedとの接続の設定は、
「application/config/memcached.php」
で行います。

ファイルを見てみると、デフォルトの設定は以下のようになっていました。


  1. $config = array(
  2.     'default' => array(
  3.         'hostname' => '127.0.0.1',
  4.         'port'     => '11211',
  5.         'weight' => '1',
  6.     ),
  7. );




このまま使えそうです。






Class Reference



CI_Cacheのリファレンスです。
上記で設定したMemcachedキャッシュを例に動作させながら確認してみます。




is_supported($driver)



指定したキャッシュが有効かチェックします。


Parameters:
$driver (string) – the name of the caching driver

Returns:
TRUE if supported, FALSE if not

Return type:
bool





  1. <?php
  2. class Sample extends CI_Controller {
  3.     
  4.     public function index() {
  5.         
  6.         $this->load->driver('cache');
  7.         
  8.         // どちらの指定でもOK
  9.         //if ($this->cache->memcached->is_supported()) {
  10.         if ($this->cache->is_supported('memcached')) {
  11.             echo 'ok';
  12.         } else {
  13.             echo 'ng';
  14.         }
  15.     }
  16.     
  17. }




543_01.png




get($id)



キャッシュから指定idのデータを取得します。


Parameters:
$id (string) – Cache item name

Returns:
Item value or FALSE if not found

Return type:
mixed




  1. <?php
  2. class Sample extends CI_Controller {
  3.     
  4.     public function index() {
  5.         
  6.         $this->load->driver('cache', array('adapter' => 'memcached'));
  7.         
  8.         echo $this->cache->memcached->get('foo');
  9.         echo '<br>';
  10.         echo $this->cache->memcached->get('bar');
  11.     }
  12.     
  13. }




※こちらで登録したデータを取得しています。
Debian 7にapt-getでmemcachedをインストールし、php5から接続する

543_02.png




save($id, $data[, $ttl = 60[, $raw = FALSE]])



指定したIDでデータを保存します。
ttlで保存期間を指定可能です。


Parameters:    
$id (string) – Cache item name
$data (mixed) – the data to save
$ttl (int) – Time To Live, in seconds (default 60)
$raw (bool) – Whether to store the raw value

Returns:    
TRUE on success, FALSE on failure

Return type:    
string





  1. <?php
  2. class Sample extends CI_Controller {
  3.     
  4.     public function index() {
  5.         
  6.         $this->load->driver('cache', array('adapter' => 'memcached'));
  7.         
  8.         // 保存実行
  9.         $this->cache->save('key', '日本語でこんにちは');
  10.         
  11.         // 保存したデータを表示
  12.         echo $this->cache->get('key');
  13.     }
  14.     
  15. }




543_03.png


arrayをデータに指定してみます。


  1. <?php
  2. class Sample extends CI_Controller {
  3.     
  4.     public function index() {
  5.         
  6.         $this->load->driver('cache', array('adapter' => 'memcached'));
  7.         
  8.         // 保存実行
  9.         $data = array(
  10.             'key-1' => '最初のデータ',
  11.             'key-2' => '二番目のデータ',
  12.         );
  13.         
  14.         $this->cache->save('key', $data);
  15.         
  16.         // 保存したデータを表示
  17.         $mc_data = $this->cache->get('key');
  18.         
  19.         echo is_array($mc_data);
  20.         echo '<br>';
  21.         echo $mc_data['key-1'];
  22.         echo '<br>';
  23.         echo $mc_data['key-2'];
  24.     }
  25.     
  26. }




543_04.png


ttlで有効時間を指定してみます。


  1. <?php
  2. class Sample extends CI_Controller {
  3.     
  4.     public function index() {
  5.         
  6.         $this->load->driver('cache', array('adapter' => 'memcached'));
  7.         
  8.         // 保存実行
  9.         $this->cache->save('key', 'value', 2);
  10.         
  11.         // 保存したデータを表示
  12.         echo '直後:';
  13.         echo $this->cache->get('key');
  14.         echo '<br>---<br>';
  15.         
  16.         sleep(1);
  17.         echo '1秒後:';
  18.         echo $this->cache->get('key');
  19.         echo '<br>---<br>';
  20.         
  21.         sleep(1);
  22.         echo '2秒後:';
  23.         echo $this->cache->get('key');
  24.         echo '<br>---<br>';
  25.         
  26.     }
  27.     
  28. }





指定時間で消えてますね。

543_05.png




delete($id)



キャッシュデータの削除を行います。


Parameters:
$id (string) – name of cached item

Returns:
TRUE on success, FALSE on failure

Return type:
bool





  1. <?php
  2. class Sample extends CI_Controller {
  3.     
  4.     public function index() {
  5.         
  6.         $this->load->driver('cache', array('adapter' => 'memcached'));
  7.         
  8.         // 保存実行
  9.         $this->cache->save('key', 'value');
  10.         
  11.         // 保存したデータを表示
  12.         echo '直後:';
  13.         echo $this->cache->get('key');
  14.         echo '<br>---<br>';
  15.         
  16.         // 削除実行
  17.         $this->cache->delete('key');
  18.         
  19.         
  20.         echo '削除後:';
  21.         echo $this->cache->get('key');
  22.         echo '<br>---<br>';
  23.         
  24.     }
  25.     
  26. }




543_06.png




increment($id[, $offset = 1])



指定たキーの値を指定数分増加させます。


Parameters:    
$id (string) – Cache ID
$offset (int) – Step/value to add

Returns:    
New value on success, FALSE on failure

Return type:    
mixed




初期値は事前に登録しておかないと行けない模様。
また、APCとMemcacheをキャッシュに使用する場合は、raw = TRUEで登録します。

データの有効期間をサポートしていない場合は、ライブラリ内部でデータにttlを設定しているようです。
redisなど有効期間を標準で対応している場合は、この指定は不要だと思います。


  1. <?php
  2. class Sample extends CI_Controller {
  3.     
  4.     public function index() {
  5.         
  6.         $this->load->driver('cache', array('adapter' => 'memcached'));
  7.         
  8.         // 初期値をrawデータで登録(raw = TRUE)
  9.         $this->cache->save('iterator', 1, 0, TRUE);
  10.         
  11.         // 1ずつ増加させる
  12.         echo $this->cache->increment('iterator');
  13.         echo '<br>---<br>';
  14.         echo $this->cache->increment('iterator');
  15.         echo '<br>---<br>';
  16.         
  17.         // 3進める
  18.         echo $this->cache->increment('iterator', 3);
  19.         echo '<br>---<br>';
  20.         
  21.         
  22.     }
  23.     
  24. }




543_07.png




decrement($id[, $offset = 1])



指定たキーの値を指定数分現象させます。



Parameters:    
$id (string) – Cache ID
$offset (int) – Step/value to reduce by

Returns:    
New value on success, FALSE on failure

Return type:    
mixed





  1. <?php
  2. class Sample extends CI_Controller {
  3.     
  4.     public function index() {
  5.         
  6.         $this->load->driver('cache', array('adapter' => 'memcached'));
  7.         
  8.         // 初期値をrawデータで登録
  9.         $this->cache->save('iterator', 10, 0, TRUE);
  10.         
  11.         // 1ずつ減少させる
  12.         echo $this->cache->decrement('iterator');
  13.         echo '<br>---<br>';
  14.         echo $this->cache->decrement('iterator');
  15.         echo '<br>---<br>';
  16.         
  17.         // 4減らす
  18.         echo $this->cache->decrement('iterator', 4);
  19.         echo '<br>---<br>';
  20.         
  21.         
  22.     }
  23.     
  24. }




543_08.png




clean()



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


Returns:
TRUE on success, FALSE on failure

Return type:
bool





  1. <?php
  2. class Sample extends CI_Controller {
  3.     
  4.     public function index() {
  5.         
  6.         $this->load->driver('cache', array('adapter' => 'memcached'));
  7.         
  8.         echo $this->cache->get('foo');
  9.         echo '<br>';
  10.         echo $this->cache->get('bar');
  11.         echo '<br>------<br>';
  12.         
  13.         // キャシュ削除
  14.         $this->cache->clean();
  15.         
  16.         echo $this->cache->get('foo');
  17.         echo '<br>';
  18.         echo $this->cache->get('bar');
  19.         
  20.         
  21.     }
  22.     
  23. }




2つのデータが一気に削除されています。
マスターデータの総入れ替え等の時に便利かも。

543_09.png



cache_info()



キャッシュの情報を取得します。


Returns:
Information on the entire cache database

Return type:
mixed




  1. <?php
  2. class Sample extends CI_Controller {
  3.     
  4.     public function index() {
  5.         
  6.         $this->load->driver('cache', array('adapter' => 'memcached'));
  7.         
  8.         var_dump($this->cache->cache_info());
  9.         
  10.         
  11.     }
  12.     
  13. }




543_10.png




get_metadata($id)



登録している値の情報を取得します。


Parameters:
$id (string) – Cache item name

Returns:
Metadata for the cached item

Return type:
mixed




  1. <?php
  2. class Sample extends CI_Controller {
  3.     
  4.     public function index() {
  5.         
  6.         $this->load->driver('cache', array('adapter' => 'memcached'));
  7.         
  8.         $this->cache->save('foo', 'bar');
  9.         
  10.         var_dump($this->cache->get_metadata('foo'));
  11.         
  12.         
  13.     }
  14.     
  15. }




memcachedではこのような表示になりました。
キャッシュのドライバーによって表示内容は異なります。

543_11.png




CodeIgniter 3のユーザーガイド(User Guide)まとめ

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/01/30(金) 00:18:00|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ