WordPress のエントリ更新時に Memcached のキャッシュをクリアしたい

さくらのVPS上で動かしているこのブログですが、高速化のために Memcached によるオブジェクトキャッシュを利用しています。

Memcached Manager で見ると、良い感じにキャッシュは使われているので、それにありに効果はあると思うんですが、関連記事を表示するプラグイン、YARPP を使用していると、エントリの更新時などに関連記事が何も表示されないという現象にぶち当たって悩んでいました。

このとき、Memcached Manager にてキャッシュクリアを実行すると、正しく表示されるようになるため、Memcached のキャッシュが悪さをしていると思われます。

公式サイトのフォーラムでも、[Plugin: Yet Another Related Posts Plugin] No related posts When Post Published or Updated という投稿があり、将来的には対応される可能性が書かれていますが、現時点では上手くいかないので、自力で何とかしてみようと。

WordPress に手を加えずに解決しようと思ったら、定期的にキャッシュクリアするか、エントリ更新時に自力でキャッシュクリアすれば(今まではそうやってましたw)問題にはならないんですが、面倒といえば面倒。

そんなわけで、自動でなんとかできないかと考えたときに、アクションフックを使えばいけるんじゃね? 的なことを思いました。

Codex によると、pre_post_update というフックが、投稿またはページが更新される直前に実行されるということなので、エントリ公開直前にキャッシュをクリアしてしまえばどうよ? と思い、 functions.php に処理を追加してみました。

PECL::Memcache がインストールされている環境で、Memcache::flush を行えばキャッシュがクリアされるということなので、

#投稿時にmemcachedをflushしてみるテスト
function my_memcached_flush($post_id) {
        $memcache_obj = new Memcache;
        $memcache_obj->connect('localhost', 11211);                                        
        $memcache_obj->flush();
}
add_action('pre_post_update','my_memcached_flush');

するとなんということでしょう、

いや、そりゃ動作しなきゃ困るんで、これで良いんですけれど。ひとまず目的は達成できました。

ですが、こうすると、更新の度に今まで溜め込んだキャッシュが無効になってしまうんで、高速化という側面からすると問題が出るかも知れません。

実際は、他のキャッシュと併用してるので表立った影響は体感ではないとは思うんですが、もっとスマートな方法あったら教えていただきたいですね。