考察

あとで書く

・・・と、上記のように書いたところすでにはてなのタグとして「あとで書く」があったみたいで、ずばり図星の意味が書かれてるわけですが、とりあえずmemcacheについて書いてみることにしますw。で、最近では比較的有名になったオブジェクトをメモリにキャッシュ機構でお馴染みmemcacheですが、普段使用していて多少不満に思うことがあります。

どんなKeyが格納されてるかわからないのかね

Keyを指定すればデータがわかるのは当然ですが、どのようなKeyが格納されてるかを知る手段はないようです。当然memcacheを利用するアプリケーション側でkeyのindexを管理すべきなのですが、管理上知りたいこともあるので、ぜひとも実装してほしい機能です。

一度データが格納されるとメモリは開放されないのかね

もともとgetメソッドで指定する引数 'expire' にが過ぎたデータについては勝手に確保領域を開放するのかと期待してたのですが、単純にデータそのものの有効期限であって、メモリについては開放されない勘違いを永らくしてしまいました。

そういえば以前、理想的な使い道を負荷試験も兼ねて考えてみたことがあるので、今回Smartyなどテンプレートエンジンを使う例と併せて説明します。Smartyを使う場合、主にSmarty変数に格納するデータの入れ物にmemcacheを使うケースが多く見受けられます。まあ、実装としてはわかりやすいのですが、実際のところ、値そのものではmemcacheの内部データ形式にコンバートするオーバーヘッドが多いため、変数を格納するのには馴染まないようです。

そのため、webページに表示するための変数を格納していたのをやめ、fetch済みテンプレートデータをキャッシュしたところスループットはかなり向上しました(そのときの数字は探しておきますw)この手法、ページそのものが動的な場合には有効なのですが、ページの一部のみ動的(例えば「こんにちは○○さん!」とかのニックネーム表示とか)には使えないので、その場合はキャッシュできそうなパーツをmemcacheに入れるしかなさそうです。

ともあれmemcacheによってかなり救われたことが多いので、ソースなどをみてもっと研究してみたいと思います。