cakephp2.x memcache の使い方

2014年2月24日更新 view: 436 view
photoBy: http://crustabakes.files.wordpress.com/2013/06/ra…

memcacheを使おう!

memcacheって?

一番早いキャッシュエンジン。

まずはインストール

linuxでrootログインしてコマンド。

yum --enablerepo=remi,epel,rpmforge install libevent libevent-devel memcached php-pecl-memcache php-pecl-memcached

インストールにつまづいたら?

例えば,php5.4をインストールしているのに、php5.3のmemcaheをインストールしようとするとエラーが出る。
そんな時は、以下からmemcache 系のファイルを探して、php5.4に対応した php54-pecl-memcached-2.1.0-1.el6_0.wing.x86_64.rpm
を探して、直接yum install しよう。

http://wing-repo.net/wing/6/x86_64/

yum install http://wing-repo.net/wing/6/x86_64/php54-pecl-memcache-3.0.8-1.el6_2.wing.x86_64.rpm
yum install http://wing-repo.net/wing/6/x86_64/php54-pecl-memcached-2.1.0-1.el6_0.wing.x86_64.rpm

nginxの場合はphpの再起動に注意

Fatal error: Uncaught exception 'CacheException' with message 'Cache engine default is not available.' in /var/www/html/qjiin.com/lib/Cake/Cache/Cache.php:173 Stack trace: #0 /var/www/html/qjiin.com/lib/Cake/Cache/Cache.php(151): Cache::_buildEngine('default') #1 /var/www/html/qjiin.com/app/Config/core.php(444): Cache::config('default', Array) #2 /var/www/html/qjiin.com/lib/Cake/Core/Configure.php(72): include('/var/www/html/q...') #3 /var/www/html/qjiin.com/lib/Cake/bootstrap.php(175): Configure::bootstrap(true) #4 /var/www/html/qjiin.com/app/webroot/index.php(90): include('/var/www/html/q...') #5 {main} thrown in /var/www/html/qjiin.com/lib/Cake/Cache/Cach

というエラーが出ている場合は、キャッシュエンジン名を memcached にしてしまっているか、phpが再起動されていない場合がある。
その場合、apacheの場合は再起動するだけでいいが、nginxの場合のphp再起動は

/etc/init.d/php-fpm restart

をやる必要があるので注意。

設定ファイル変更

vi /etc/sysconfig/memcached

こんな感じにしておく。
以下の値を、以下のようにしておく。
他の値はそのまま残しておくように。

MAXCONN="4096"
CACHESIZE="2048"

リスタート!

service memcached start

自動起動設定

chkconfig --add memcached
chkconfig memcached on
chkconfig --list memcached

0:off 1:off 2:on 3:on 4:on 5:on 6:off
と出れば成功

いざcakephpで設定。

/Config/Core.php

スポンサードリンク
Cache::config('default', array(
    'engine' => 'Memcache',
    'duration' => 3600,
    'probability' => 100,
    'prefix' => Inflector::slug(APP_DIR) . '_',
    'servers' => array(
        '127.0.0.1:11211'
    ),
    'persistent' => true,
    'compress' => false,
));

これを書いてバグらなければ成功。

また、350行目あたりを 以下にすればすべてmemcachedになる。

$engine = 'Memcache';

memcacheを削除するには?

セッションは消さず、ファイルのみ削除

キャッシュ名に cake という名前があったら削除します。
それ以外は削除しません。
また、cache フォルダ全ても一応削除するって感じです。

参考:http://c-brains.jp/blog/wsg/11/04/21-140105.php

function cachedelete()
{
    Configure::write("Cache.disable", true);
    $memcache = new Memcache();
    $memcache->addServer('127.0.0.1');
    $slabs = $memcache->getExtendedStats("slabs");

    foreach (array_keys($slabs["127.0.0.1:11211"]) as $memcache_id) {
        if ($memcache_id !== "active_slabs" && $memcache_id !== "total_malloced") {
            $key_array = $memcache->getStats("cachedump", $memcache_id, 10000);
            if (!empty($key_array)) {
                foreach (array_keys($key_array) as $key) {
                
                    $app = Inflector::slug(APP_DIR);
                    if (preg_match("/cake/", $key)) {
                        $memcache->delete($key);
                        
                    }
                }
            }
        }
    }
    
    
    
    
    $path = APP.'tmp'.DS.'cache'.DS;
    
    $this->delDir($path);
    $this->delDir($path.'models'.DS);
    $this->delDir($path.'persistent'.DS);
    $this->delDir($path.'views'.DS);
    
    $this->redirect($_SERVER['HTTP_REFERER']);
    $this->autoRender = false;
    
}
スポンサードリンク

関連記事

関連カテゴリ

松下 由美

こんにちわ。松下由美です。 記事を頑張って書いていきますね。

ピックアップ

パソコン・ソフトウェア ランキング

3月24日 ( 金 ) にアクセスが多かった記事はこちら!