WordPressでKVSのRedisを導入

WordPressでKVS

WordPressではNginxでプロキシキャッシュを効かせても、どうしても必然的にMySQLのDBへのSELECTが発生してしまいます。DB接続は致命的に遅い。何とか速度向上ができないかと思って、いま流行りのKVS(Key Value Store)のRedisを導入してみました。KVSの中でもmemcachedやkumofs、okuyamaなども検討したのですが、今回は一番流行っているKVSのRedisにしてみることにしました。

WordPressでRedis

WordPressへのRedisの導入はいたって簡単です。openSUSEの場合は、以下のコマンドでサーバーにRedisが導入できます。

CentOSの場合、remiやepelの拡張レポジトリを追加することで、yum isntallができます。

Redisのconfは/etc/redis.confに出来ますが、設定できるパフォーマンスチューニングの項目はあまり多くはありません。基本デフォルトのまま使って、メモリ空き状況を見て適宜パラメータを変えていくので大丈夫かと思います。そして、Redisを起動させます。

標準状態でRedisは6379ポートで起動します。

WordPressにRedisを組み込む

WordPressにRedisを組み込む方法は、下記サイトをご参照ください。

http://www.jimwestergren.com/wordpress-with-redis-as-a-frontend-cache/

基本、ここで公開されているindex-with-redis.phpをindex.phpに置き換えるだけで大丈夫です(Nginxの場合)。あと、このページ内のpredis.phpを直下のディレクトリに配置しましょう。ただ、標準で、index-with-redis.phpの$_SERVER[‘HTTP_CACHE_CONTROL’]という設定がほとんど来ないので、私はこんな感じに変えてしまいました。

まず最初にデバックしたい時は、下記を両方とも1にすることが望ましいと思います。

WordPress + Redisの使い方

上記の変更を行った時点で、Redisへのキー登録やメモリ使用は始まります。ただ、上記のスクリプトの関係上、管理者でWordPressでログインしている場合と、普通のユーザー(非ログインユーザー)としてブログにアクセスした場合とで、見え方が違ってくることに注意しましょう。管理者でログインしている場合は、Redisのキャッシュがない状態で見えています。一般ユーザーで閲覧している場合はRedisのキャッシュを見ています。このため、一般ユーザーがしばらく古いRedisのキャッシュを見続けることがあります。

その時は、管理者でログインして、Redisのキャッシュクリアを行いたいアドレスで、?r=yを付けてアクセスしましょう。例えばトップページならば、

です。これにより、このページのRedisのキャッシュが削除されます。サイト全体のキャッシュをクリアにしたい時は、?c=yを付けてアクセスしましょう。

どれくらいボトルネックが解消されるか

アクセス過多のサイトでない限り、MySQLにKVSを挟んでもあまりスピードアップすることはないですが、いちおうベンチマークの結果を貼っておきます。

また、私のサーバーのRedisの状態は公開しているMuninで閲覧できます。以下からご覧ください。

私のサーバーのMunin (Redis)

それでは、KVSで快適かつ高速なWordPressライフを!

コメントを残す