FuelPHPのキャッシュライブラリ – memcached編
今回はmemcachedストレージ
Memcached
まず、cacheのコンフィグファイルをapp配下にコピーします。
cp fuel/core/config/cache.php fuel/app/config/
以下のように「fuel/app/config/cache.php」の内容を設定します。
return array(
  'driver' => 'memcached',
  'expiration' => null,
  'memcached'  => array(
    'cache_id'  => 'fuel',
    'servers'   => array(
      array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100)
    ),
  ),
);
これで「memcached」ストレージをキャッシュに使用する設定ができました。
とりあえず、キャッシュを生成して試してみます。
コードの内容は、
コントローラー
public function action_memcache()
{
    // String
    Cache::set('string', 'cache test');
    $data['string'] = Cache::get('string');
    // Array
    $a = array(1, 2, array('key' => 'value'));
    Cache::set('array', $a);
    $data['array'] = Cache::get('array');
    // Object
    $o = new Library_Test();
    Cache::set('object', $o);
    $data['object'] = Cache::get('object');
    return Response::forge(View::forge('cache/memcache', $data));
}
View
<html> <body> <p>Cache - Memcached</p> <div>String:<?php var_export($string) ?></div> <div>Array :<?php var_export($array) ?></div> <div>Class :<?php var_export($object) ?></div> </p> </body> </html>
こんな感じです。
この時に使用したLibrary_Testオブジェクトのソースは、
<?php
class Library_Test {
  public static function _init()
  {
  }
  public function __toString()
  {
    return 'Library_Test';
  }
}
こんな感じです。
(Library_Testの設置場所は「fuel/app/classes/library/test.php」です)
でアクセスしてみると、
エラーがでた。memcachedをインストールしてませんでした。
ということでインストール(epelリポジトリなので、もしかすると環境によってはyumのリポジトリが見つからない可能性があります。その場合は、こちらを参考にリポジトリを追加するか、自力でphpのmemcached extensionをインストールしてください)
sudo yum install php-pecl-memcached sudo /etc/init.d/httpd restart
で、再度アクセス
こんな感じになります。
登録されているキャッシュのデータを確認すると
こんな感じでした。
APCの時と全く同じ形で登録されていました。
問題点
ソースを呼んでみるとphpのmemcachedライブラリの「setOption」を使用が出来るように設計されていません。
となるとデフォルトのままでは「Consistent Hashing」の設定をできないのでは?と思っています。
これができないと「サーバの追加時にキャッシュミスだらけ」になってしまいます。
- rubyですが参考サイト
- phpでの設定方法
やっぱり拡張しないとダメなのかな…。
次回は、redisを調べてみます。



 
 
 
 
 
 
