2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RailsにおけるCache戦略について(フラグメントキャッシュ)

Last updated at Posted at 2019-10-22

ここでは、フラグメントキャッシュ(viewにおけるキャッシュ)についてまとめています。

注意: 時間の経過とともにレスポンスが変化するデータのキャッシュについて

こちらを参照

はじめに覚えておくこと

  • Rails.cache.fetch このメソッドで、キャッシュのread/writeが両方出来る。
  • <cache_key> 後述の通り、基本的にRailsが用意しているものを使う。
  • expires_in キャッシュの有効期限を指定する。

実装例

<% @products.each do |product| %>
  <% cache product do %>
    <%= render product %>
  <% end %>
<% end %>

生成されるキャッシュのキー

views/products/1-201505056193031061005000/bea67108094918eeba42cd4a6e786901

以下の要素から構成されています。

  • views/<テーブル名>
  • id
  • レコードのupdated_at
  • テンプレートツリーダイジェスト(キャッシュされるビューフラグメントの内容から算出されたハッシュダイジェスト。ビューのHTMLが変更された場合にもキャッシュは更新されるので、そのために利用)

特定の条件でキャッシュしたい場合

cache_ifcache_unlessを使用可能。

<% cache_if admin?, product do %>
  <%= render product %>
<% end %>

コレクションキャッシュ

<%= render partial: 'products/product', collection: @products, cached: true %>

ログ

Cache read: views/e2a9dc497/top_page/show:e7f6dd0afce2b83daec666e202917715/ja/users/30-20191010012413000000/toppage/show

その他(Railsのデフォルトではないキャッシュについて)

以下は、Rails4で本体から取り除かれて、gem化されたものです。

ページキャッシュ

  • Rails 4本体から取り除かれ、gem化された。actionpack-page_cachingを参照。
  • 認証が不要なページのキャッシュに使われる。
  • nginxなどのwebサーバーによって生成されるページへのリクエストを(Railsスタック全体を経由せずに)キャッシュするメカニズム。

→ ページキャッシュではなく、CDNやリバースプロキシを使うのが一般的。

アクションキャッシュ

  • Rails 4本体から取り除かれ、gem化された。actionpack-action_cachingを参照。
  • リクエストがRailsスタックにヒットしたときに、before_filterを実行してからキャッシュを返す。認証が必要なページでも有効。
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?