WordpressでAPCを使ったObject Cacheを有効にする
Wordpressのプラグインの開発で、標準で提供されているキャッシュ機能を利用しようと思っても、何も設定しないとwp_cache_setしてwp_cache_getしても無意味と気づいたときのメモ。
単にキャッシュして高速化するならW3 Total CacheとかWP Super Cacheをインストールすればプラグインが自動でいろいろやってくれるので劇的に速くなると思う。
ただPHPで動的に表示するページとかktai styleとの絡みが怖かったので、明示的にプログラムでキャッシュしたい場合にだけキャッシュする。
wp-includes/cache.phpのWP_Object_Cacheクラスの使い方やキャッシュする方法はいろいろあるよ。的な説明は本家のページを読む。
前の記事でAPC(Alternative PHP Cache)はインストール済みなので、今回はWP_Object_CacheのバックエンドにAPCを使う。
ここのブログからリンクされている(APC Object・・・をクリック)apc-object-cache.phpをダウンロード。
wp-content/object-cache.phpとして配置。
これで完了。
内部的にはwp_cache_setしたときはapc_storeを呼んでいるだけ。ちなみになぜ「object-cache.php」という名前にしないといけないのかは、wp-setting.phpの290行目あたりを見れば分かる。
これでGoogle AJAX Search APIに毎回問い合わせなくて済む。
Picasaの写真を取得するプラグインを作成したときのキャッシュを使う部分は次のような感じ。
$xml = wp_cache_get('album_' . $id, WP_PICASA_CLIENT_CACHE_GROUP); if (empty($xml)) { //if not cache then connect to picasa $api_manager = new WPPicasaClientAPIManager(); if (!$api_manager->auth($account, $password)) { return false; } //get photos $xml = $api_manager->get_photo_list($album['link_api']); //set cache wp_cache_set('album_' . $id, $xml, WP_PICASA_CLIENT_CACHE_GROUP, WP_PICASA_CLIENT_CACHE_TIMEOUT); }
<関連記事>