tokyotyrantTweetはじめに今回はRailsをTokyoTyrantでビューキャッシュする方法についてです。Railsのキャッシュ機能には、オンメモリ、ファイル、drb、Memcacheから好きなストレージを選んで利用することができます。高速で永続性可能なKeyValueストアのTokyoTyrantをプロジェクトで採用することも多いので、ビューキャッシュにTokyoTyrantを使えないか試してみました。TokyoTyranthttp://fallabs.com/tokyotyrant/TokyoTyrantのインストールTokyoTyrantがまだインストールされていない場合は、各環境に合った方法でインストールしてください。tokyotyrantTokyoTyrantサーバーを起動するTokyoTyrantのサーバーを起動するには「ttserver」コマンドを使います。Railsはデフォルトの場合、production環境ではキャッシュが有効になっていますが、development環境では無効となっています。true」を設定しましょう。キャッシュストレージとしてTokyoTyrantのポート1978を指定する。“localhost:1978”...(略)おもしろいのは、TokyoTyrantがMemcachedとインターフェイスの互換性を持っているため、キャッシュストレージを:mem_cache_storeのままで、ポートを1978にしてやれば、そのまま利用可能なんです。Memcachedのexpires(キャッシュしている期限)はTokyoTyrantには無いので、Memcacheで有効期限を使った感覚でコードが書けない点に注意する必要があります。描画するHTMLの一部だけをキャッシュするにはフラグメントキャッシュというキャッシュ方法がRailsには用意されています。これはHTMLの一部分だけキャッシュしたい場合に有効です。・・ログイン情報など、すべてのユーザーに対して共通でない部分がある。(この場合がほとんど)ページの一部分だけ、DBの処理が重くて、ページを表示するのに時間がかかる。いう場合、フラグメントキャッシュがとても効果を発揮します。Railsはフラグメントキャッシュが見つかれば、キャッシュを利用してHTMLを描画しますし、なければキャッシュを作成して、次回アクセス時の負荷が減ります。コントローラー側でキャッシュが見つからなかった時だけ、DB処理をかけたりできるので、MVCのルールから外れずに、効果的にレスポンス速度をあげることが可能です。キャッシュされたページです。ブロック内をキャッシングします。cacheブロックで囲むだけでキャッシュするというのが直感的です。キャッシュが存在するかチェックできます。キャッシュが見つからなかった場合のみ、部分キャッシュで利用するデータを取得しています。キャッシュに有効期限をつける一度キャッシュしたHTMLを失効するには、明示的にexpire_fragment(キャッシュ名)メソッドを実行する必要があります。いうような書き方が可能なので便利です。TokyoTyrantを利用している場合(:file_storeでも)、キャッシュ名に有効期間のスタンプを付けておくことで、擬似的な有効期限を設けてみます。タイムスタンプをキャッシュしたい秒数で割った数値をスタンプとしてみます。...(略)endApplicationControllerにcache_keyというメソッドを定義。形でキャッシュ名を作成します。endendおまけ:キャッシュの破棄キャッシュ名にタイムスタンプをつける方法だと、大量のキャッシュがたまってしょうがないので、いらなくなったキャッシュを捨てる方法です。たまったままで良いならその限りではないです。endendTokyoTyrantSweeperというお掃除用のクラスを作りました。コマンドを直接叩く簡単なものにしました。こんな感じで使います。検索して引っかかったキャッシュを全部捨てるtt_sweeper.sweep('hoge')最後にRails+TokyoTyrantでビューキャッシュする方法についていろいろと書いてみました。Memcachedと違って有効期限が使えないことから、TokyoTyrantに依存するコードが入ってしまうのが反省すべき点となってしまいました。作るのが一番スマートかもしれません。諸事情でMemcachedが使えないなんて時にどうぞ。date*日本語が含まれない投稿は無視されますのでご注意ください。fax.0422-26-9781お問い合わせはこちらからどうぞ。