エラー default cache was unable to write ‘hogehoge’ to Memcache cache

タイトルのエラーがでたりでなかったりする。あとそもそも認証のセッション保持期間が変。
capistranoでデプロイした後に、memcachedを再起動してるのですが、その後にhttpdも再起動しないとうまく動かなかった。

cakePHP SessionをDB+memcachedにしてみる

セッションをmemcached+DBというコンボセッションにしたいと思います。コンボセッションというのはここに書いてあるからそういう風にいうのかなと思いました。
http://book.cakephp.org/2.0/ja/development/sessions.html

上記ではAPCが使われていますが、APCの変わりにmemcachedを使ってみようと思います。APCはmemcachedより速いけどapache再起動したら消えてしまうとどこかに書いてありました。memcachedもmemcached再起動したら消えるし、速い方がいいのかなとも思いますが、まあどっちでもいいかと思いました。

今キャッシュのdefaultもmemcachedになっております。

まず、core.phpでセッションのdefaultをdatabaseにします。engineをComboSessionというのにしておいて、cacheはdefaultにします。

次に、ComboSessionをつくります。上記のcakePHPのcookbookに書いてあるコードをコピペします。

次に、データベースにsession用のテーブルをつくります。app/Config/Schema/sessions.sqlを使って、sessionsテーブルをつくってSessionモデルをつくったらできました。

EC2 cakePHPでMemcachedつかう

AmazonLinuxにMemcachedを設定します。

インストールと設定

インストールします。
参考:さくらの VPS 設定覚書(4)PHP

設定します。

Memcached を起動します。

自動起動の設定をします。

“0:off 1:off 2:on 3:on 4:on 5:on 6:off”と出れば、設定成功です。

memcache.iniを設定します。
http://php.net/manual/ja/memcache.ini.php

Apacheを再起動します。
service httpd restart

php -R ‘ phpinfo(); exit(); ‘ | grep “memcache”
で、反映してるか確認できます。

EC2でポートをあける

Custom TCP Rule, tcp, 11211, セキュリティグループ

cakePHPでつかえるようにする

core.phpで下記がコメントアウトされてるので、コメントを外します。

あとは、キャッシュを使いたいところで、App::uses(‘Cache’, ‘Cache’);を書いて、Cache::read(‘hoge’);とか、Cache::write(‘hoge’, 123);とかやります。

memcachedは、apacheを再起動しても消えないけど、memcachedを再起動したら消えます。あとcakePHPのCacheは、モデルが追加、編集、削除されたときにモデルに関するキャッシュを消すそうです。でもroutes.phpでURL変えてると消えない場合があるようです。

APC

APCはPHPアクセレーターというやつです。

PHPアクセレーターとは、PHPのスクリプトを最適化してコンパイルされた状態でデータをキャッシュし、以後同じデータにアクセスがあった際、そのキャッシュを利用することでスクリプトの実行速度を高速化させるためのものです。(APCでPHPの処理を高速化

APCをインストールします。
yum install php-pecl-apc

php-pecl-apc.x86_64 0:3.1.15-0.3.svn329913.10.amzn1がインストールされました。
/etc/php.d/apc.iniに設定ファイルがあります。(CentOSです。AmazonLinuxです。)
自動的に設定ファイルをつくってくれていますので、apacheを再起動したら反映されます。
APCコンソールは別にみなくてもいいので使いません。

apc.iniの設定項目の説明は、ここにあります。
http://php.net/manual/ja/apc.configuration.php

apc.ttl = 3600
apc.user_ttl = 3600
apc.max_file_size=5M

を設定してみた。

php -R ‘ phpinfo(); exit(); ‘ | grep “apc”

で反映されてるか確認できます。