質問: 以下の記事などを参考にキャッシュについて勉強しているのですが、 「オブジェクトをキャッシュする」という意味がわかりません。 たとえば、Textというモデルがあった場合、 オブジェクトをキャッシュするというのはTextオブジェクトをキャッシュするということなのでしょうか? app/models/text.rb ``` class Text end ``` また、fragment cacheというのは`rails で利用できる view の一部分をキャッシュする機能。`だと認識しておりますが、 オブジェクトをキャッシュするケースと fragment cacheするケースでの使い分け方がよくわかりません。 オブジェクトをキャッシュする方が、より広い範囲のキャッシュができるのかなという程度の漠然としたイメージしか現時点ではありません・・・。 よろしくおねがいします。
回答: > > オブジェクトをキャッシュするというのはTextオブジェクトをキャッシュするということなのでしょうか? > > > はい。その場合の`オブジェクト`は、`インスタンス`と同義と考えられます。 ``` text = Text.first Rails.cache.write("some_cache_key", text) ``` しかし、こう書くと「DBから取得したデータ」や「インスタンス化されたオブジェクト」をキャシュするものだ、という誤解が産まれるかもしれません。 実際のところ、キャッシュする対象は、文字列でも、数値でも、何でも構いません。 キャッシュの基本的な考え方は、**時間の掛かる処理を回避するために、以前に使用したデータを再利用する**というものであり、対象のデータは何でも良いのです。 > > オブジェクトをキャッシュするケースと > > fragment cacheするケースでの使い分け方がよくわかりません。 > > > `fragment cache` というのは、view の中でオブジェクトキャッシュを便利に使えるようにした rails の機能のことです。 `htmlの生成`は時間の掛かる処理なので、回避したい。 → とはいえ、htmlを全部キャシュすると、一部分が毎回変わるページに対応できない。 → なら部分ごとにキャッシュすればいい。だけど毎回オブジェクトキャッシュを書くのは大変。 → 便利に使える仕組みを作った → fragment cache という名前にしよう というのが、この辺りに書いてある(気がします)。 Fragment caching is used for caching various blocks within views without caching the entire action as a whole よって、使い分けとしては、view の場合は、fragment cache、それ以外はオブジェクトキャッシュ、ということになると思います。 (もちろん、view の場合でも、自作のオブジェクトキャッシュを使っても良いです)