Windows環境のMTでmemcachedを使う

  • 投稿日:
  • by
  • カテゴリ:

懲りることを知らない私は、前回に引き続きWindows関係のネタを書いていこうと思います。

Movable Type 4 では、分散型メモリキャッシュシステムであるmemcachedを使ったキャッシュ機構が組み込まれています。
システム自体は、大規模なシステムでこそより大きな効果を発揮する性質のものではありますが、メモリに余裕があれば、単体での利用でもかなりの効果を望めます。
また、MT::Memcachedを使った開発を行う場合、ローカル環境で動作確認できると大変便利です。

そこで、今回はWindows環境のMovable Typeでmemcachedを利用する方法を紹介したいと思います。

memcachedのインストール

公式サイトで配布されているmemcachedはWin32向けにビルドすることができないのですが、現在いくつかのサイトにおいてWin32版のmemcachedが開発・公開されています。
今回は、執筆時点での最新となるmemcached1.2.6を公開している次のサイトのものをインストールします。

Jellycan Code - memcached

ここでmemcachedの「win32 binary」として公開されているmemcached-1.2.6-win32-bin.zipをダウンロードし、zipファイルに含まれているファイル memcached.exe を適切なフォルダに保存します。

保存後、コマンドプロンプトを開き、先程 memcached.exe を保存したフォルダへ移動し、次のコマンドラインを実行します。

memcached.exe -d install

これでmemcachedがサービスとして登録されます。デフォルトでは利用するメモリは64MBになっていますので、必要に応じて-mオプションで利用メモリを増やすとよいでしょう。あとは

memcached.exe -d start

とすることで、memcached Server サービスが起動します。

Perlモジュールのインストール

memcachedをPerlから利用するためにはPerlモジュールCache::Memcachedもしくはその互換モジュールが必要となります。
今回はWin32でも安心して使えるPurePerl実装のCache::Memcachedをインストールします。
ActivePerlではppmを用いて容易にインストールできます。

ppm install Cache-Memcached

mt-config.cgiの設定

Movable Typeに実装されているmemcachedを用いたキャッシュ機構を利用するためには、mt-config.cgiに環境変数「MemcachedServers」の設定を追加して、利用するmemcachedサーバーを指定する必要があります。
今回はローカルにインストールされたデフォルト設定のmemcacheを利用しますので、次の1行をmt-config.cgiに追加します。

MemcachedServers 127.0.0.1:11211

あとは必要に応じてWebサーバーの再起動を行います。これでmemcachedが利用されるようになりました。
どれくらい効果があるかは環境にも大きく依存すると思いますが、データベースへのアクセスが多い場面では、変化を実感しやすいのではないかと思います。

mt-config.cgiでの設定ですが、環境変数「MemcachedServers」を複数記述することで複数のmemcachedサーバーを利用することができるようになります。
また、複数のMovable Typeから同一のmemcachedサーバーを利用する場合には環境変数「MemcachedNamespace」に固有の接頭辞を設定することで、キャッシュの衝突を防ぐことができます。
必要に応じて設定しましょう。

また、memcachedの動作状況を表示したり設定を行ったりすることができる「MemCacheD Manager」のような補助ツールも存在します。必要に応じてインストールしておくと便利です。

より高速に

PerlモジュールCache::Memcachedには複数の互換モジュールが存在します。これらの互換モジュールを利用する場合にはmt-config.cgiに環境変数「MemcachedDriver」の設定を追加します。
例えばより高速に動作するCache::Memcached::Fastを利用したい場合、次の1行をmt-config.cgiに追加します。

MemcachedDriver Cache::Memcached::Fast

ただし、互換モジュールには、動作させているmemcachedのバージョンへの対応を含め、完全な互換性を持っていない可能性がありますので、導入の際には慎重に動作確認を行いましょう。

まとめ

memcachedは汎用性があり様々な言語から利用することができる大変便利なキャッシュシステムです。
導入のハードルもさほど高くないので、性能的なボトルネックが見つかった際、memcachedの利用が可能であるか検討してみるとよいかと思います。