現在MySQLとPHPをりようしたフォーラムを運営しているのですが、毎回アクセスのたびにSQLが数個実行され負荷がかかってしまっています。
以前質問したら memcached があるということがわかったのですが、いまいち仕組みがわかりません。そこで質問です。
そのようにインストールし、今現在あるスクリプトをどのように改造すればいいのでしょうか?
よろしくお願いします。
>1、ダウンロードしたmemcacheを~
バイナリを拾ってきたなら、適切なディレクトにコピーして、php.iniでエクステンションを有効化して、Webサービスを再起動。
>2、このmemcacheですが、~
しません。 更新する仕組みを自分で組む必要があります(更新処理時に、memcache::delete()を実行する等)
>3、memcahced(http://www.danga.com/memcached/)も~
PHPのmemcacheは、memcachedへ接続する為の中間システムに過ぎませんので、memcachedを導入しなければなりません。
>4、今ある~
あります。
>5、APCなど~
APCが何かわかりません。 UPSしか思いつかん・・・
・インストール
http://tokita.info/modules/wordpress/index.php?cat=21
デーモンとPHPエクステンションの組み込みが必要なので共有レンタルサーバ等で管理権限がなければ利用できない。
・改造
リアルタイムに更新される必要がないクエリの結果などをmemcachedに入れておいて、memchachedにデータがある間は新規のクエリ発行をせずに、memcachedからデータを取ってくるようにする。
例えば、全員に表示するお知らせ情報をDBに入れているなら、それの選択結果をaddしておいて、get出来る間はgetで済ませる。 get()==falseになれば、クエリを発行して再度addしておく。 また、お知らせ情報を更新するページでは、更新時にdelete()を実行して削除しておく。
・エクステンションの有効化
http://shiro.exbridge.info/archives/50980652.html
php.iniで
extension=php_memcache.dll
を追記。
変更を適用するにはWebサービス(Apache等)を再起動。
・APCもmemcacheも同じような物。 APCはローカルのメモリにキャッシュするのに対して、memcacheはmemcachedサーバにキャッシュするから、キャッシュだけ別のサーバにしたりも出来る。
・例
$mc = new Memcache;
$mc->connect('memcache_host', 11211);
if($oshirase = $mc->get('oshirase')){
}else{
~DBから$oshiraseに情報を拾ってくる~
$mc->set('oshirase', $oshirase, MEMCACHE_COMPRESSED, 60);
}
echo($oshirase);
memcachedにoshiraseが生存している間(最終DB問い合わせから60秒)、memcachedからお知らせを取得し、存在しなければ従来通りDBから取って来る。 また、DBから取ってきたときにはmemcachedに入れておく。 これで、DBへのアクセスは更新がない状態では60秒に1回で済む。
insert into oshirase values~の様な処理を行う段階で、
$mc->delete('oshirase');の様にして、memcachedのoshiraseを削除しておけば、$mc->get('oshirase')の戻り値がfalseになるので、DBから取得される。
ありがとうございます。
回答ありがとうございます。
>php.iniでエクステンションを有効化して..
?です。意味はわかるのですが、それをどのように記述すればいいのかその説明ではまったくわかりません。
改造の件ですが、いまいち文字での説明ではいまいち理解できないです。
ちなみにAPCとはPECLのAPCパッケージのことです。