体感速度 0.00000001 秒。cakephp 2.x で session と cache を redis にして超絶爆速に。

2014年11月2日更新 view: 536 view
photoBy: http://redis.io/images/redis-300dpi.png

もうMYSQLやファイルキャッシュなんてやめましょう

debug を オンにしてる時、Redisセッションだとsetflashが消えてしまうなどうまく動かない。
なので 本番運営モード 0 かデバッグモードか で php セッション、 Redis セッションをどちらを使うか振り分ける。

VPSとかじゃないと使えないかもしれませんが、Redisは素晴らしい。
MYSQLなどのキャッシュと較べて速度は圧倒的に速くなります。

cakephpで使ってみる

Redisがインストールされていて、phpredisも入っていることが前提です。

手動で sessionstart(); とかのコマンドを使っていると有効にならないので注意

cakephpがインストールされていることが前提

スポンサードリンク

boostrap.php 70行目あたり

Cache::config('default', array('engine' => 'Redis','mask' => 0777));

core.php の 26行目あたり

    Configure::write('debug', 0);//デバッグを オフ      Configure::write('database', 'default');// default のDBを使う (database.php)        //キャッシュのオン、オフは このファイルの 380 行目で行うこと      if(isset($_SERVER)){          if ($_SERVER['REMOTE_ADDR'] == '124.215.120.198' || $_SERVER['REMOTE_ADDR'] == '111.179.39.215'){  //ローカルの場合デバッグモード                if(preg_match('/Fire/',$_SERVER['HTTP_USER_AGENT'])){  //                Configure::write('debug', 2);  //                Configure::write('database', 'test');// test のDBを使う (database.php)              }                if(preg_match('/Chrome/',$_SERVER['HTTP_USER_AGENT'])){                  Configure::write('debug', 2);//デバッグをオンに              }            } else {    //            if(!isset($_SERVER['SHELL']) && !isset($_SERVER["SUPERVISOR_ENABLED"])){  ////                echo "ただfea今開発中です";  ////                exit;  //            }          }            if (preg_match('/iPhone|Android|iPad|iPod/',$_SERVER['HTTP_USER_AGENT'])) {              Configure::write('Cache.viewPrefix', 'SP');//携帯用テーマをオン          }        }

デバッグモードに応じて、 php 、 redis どちらのセッションを使うか判別

core.php 360行目あたり

$engine = 'Redis';  $database_no = 1;    // In development mode, caches should expire quickly.  $duration = '+30 days';    // Prefix each application on the same server with a different string, to avoid Memcache and APC conflicts.  $prefix = 'app_';      if(Configure::read('debug') > 0){        Configure::write('Cache', array(              'disable' => true,              'check' => false          )      );        Configure::write('Session', array(          'defaults' => 'php'      ));    } else {        Configure::write('Cache', array(              'disable' => false,              'check' => true          )      );        //session Sessionは両方必要      Cache::config('session', array(          'engine' => $engine,          'database' => $database_no,          'prefix' => 'session_cake_',          'duration' => $duration      ));        Configure::write('Session', array(          'defaults' => 'cache',          'database' => $database_no,          'timeout' => 100,          'start' => true,          'checkAgent' => false,          'handler' => array(              'config' => 'session'          )      ));    }

キャッシュをRedisに保存

Cache::config('short', array(      'engine' => $engine,      'database' => $database_no,      'duration' => '+10 seconds',//'duration' => '+1 hours',      'path' => CACHE,      'prefix' => 'cake_short_'  ));    Cache::config('hour', array(      'engine' => $engine,      'database' => $database_no,      'duration' => '+3600 seconds',//'duration' => '+1 hours',      'path' => CACHE,      'prefix' => 'cake_hour_'  ));    Cache::config('day', array(      'engine' => $engine,      'database' => $database_no,      'duration' => '+82400 seconds',//'duration' => '+1 hours',      'path' => CACHE,      'prefix' => 'cake_day_'  ));            /**   * Configure the cache used for general framework caching. Path information,   * object listings, and translation cache files are stored with this configuration.   */  Cache::config('_cake_core_', array(      'engine' => $engine,      'database' => $database_no,      'prefix' => $prefix . 'cake_core_',      'path' => CACHE . 'persistent' . DS,      'serialize' => ($engine),      'duration' => $duration,      'mask' => 0666  ));    /**   * Configure the cache for model and datasource caches. This cache configuration   * is used to store schema descriptions, and table listings in connections.   */  Cache::config('_cake_model_', array(      'engine' => $engine,      'database' => $database_no,      'prefix' => $prefix . 'cake_model_',      'path' => CACHE . 'models' . DS,      'serialize' => ($engine),      'duration' => $duration,      'mask' => 0666  ));

これで、ファイルキャッシュもセッションもredisに保存されます。

RedisCommanderでバグる場合

そのままprefixを保存かけていると大量のセッションができてしまい、rediscommanderで読み込めなくなる。
その場合は、 prefix の値の最後にコロン : をつけましょう。
これでセッションの値が整理されるようになります。

/app/webroot/media/filter/l/img/5455cf5a73fff.png
Cache::config('_cake_core_', array(      'engine' => $engine,      'database' => $database_no,      'prefix' => $prefix . 'cake_core:',      'path' => CACHE . 'persistent' . DS,      'serialize' => ($engine),      'duration' => $duration,      'mask' => 0666  ));

 

 

 

 

 

 

スポンサードリンク

関連記事

関連カテゴリ

コロ助

web関連の記事や制作系の記事をどんどんまとめていきます。 宜しくお願いします!

ピックアップ

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

9月20日 ( 水 ) にアクセスが多かった記事はこちら!