【Rails】キャッシュ機構について

イントロダクション

キャッシュとは
よく使うデータへのアクセスを速くするために、より高速な記憶装置に一時的に保存する仕組み。
一度読み込んだページをしばらく経った後も高速で表示できるのはキャッシュが残っているおかげ。

 

当記事は、Rails のキャッシュ機構を参考にして記述している。

 

また、文言が分かりづらいところは解説も含めて記述しているので、内容は希薄だが、読みやすくなっているはずだ。

 

 

Railsの主なキャッシュ機構3種類

 

・ページキャッシュ
・アクションキャッシュ
・フラグメントキャッシュ

 

 

 

ページキャッシュ

 

apachenginxなどのwebサーバーによって生成されるページへのリクエストを(Railsスタック全体を経由せずに)キャッシュするメカニズム。

 

スタックとは
スタックは、コンピュータで用いられる基本的なデータ構造の1つで、データを後入れ先出しの構造で保持するものである。
つまり、「Railsスタック」とはRailsのデータ構造のことを指す。

 

 

特徴

 

高速だが、認証の際には適用されていない。

また、webサーバーはファイルシステムから直接ファイルを読み出して利用するので、キャッシュの有効期限の実装も必要。

 

 

ページキャッシュのまとめ

 

Webサーバーによって生成されるからページキャッシュは高速

 

 

 

 

アクションキャッシュ

 

アクションキャッシュは認証に使う。

 

特徴

 

webサーバーへのリクエストがRailsスタックにヒットしたときにbefore_filterを実行してからキャッシュを返す点が異なる。

 

before_filterとは
2020年現在のRails6の「before_action」的な存在。
Rails4ぐらいから非推奨になっているため深く知る必要はなさそう。

 

 

アクションキャッシュまとめ

 

アクションキャッシュは認証に使われている

 

 

 

フラグメントキャッシュ

 

フラグメントとは
フラグメント(fragment)とは、断片、破片という意味。

 

その名の通り、フラグメントキャッシュはユーザーによって異なるページ内の動的な部分のキャッシュを設定したい時に使う。

 

例えば、ページ内で表示する製品(product)を個別にキャッシュしたい場合、次のように書くことができる。

 

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

 

その際に保存されるキーは以下のようなもの。

 

views/products/1-201505056193031061005000/bea67108094918eeba42cd4a6e786901

bea67108094918eeba42cd4a6e786901」の部分が一意の「product_idとなり、

1-201505056193031061005000」の部分がレコードのupdated_at属性となる。これは古いデータを渡さないようにするために使われている。

 

 

特徴

 

このようにキャッシュされたフラグメントは、ビューのフラグメントが変更された時(リロードをかけられた時など)に期限が切れる。

 

 

フラグメントキャッシュまとめ

 

フラグメントキャッシュは動的な部分に使われている

 

 

まとめ

 

・ページキャッシュ
・アクションキャッシュ
・フラグメントキャッシュ

 

以上が3つのキャッシュの概要とその用途だ。

 

実際のRailsガイドには、この他にも

 

ロシアンドールキャッシュ

パーシャルキャッシュ

低レベルキャッシュ

SQLキャッシュ

キャッシュストア

 

 

これらについて詳しく書かれている。

 

気になる方は是非目を通して見て欲しい。

 

ここまで読んでくれてありがとう!

 

 

おすすめ記事

 

優秀なエンジニアになりたければ小学生からやり直せ
2020.7.8
おはよう。 今日は優秀なエンジニアになりたければ小学生からやり直せという話を書いていく。 優秀なエンジニアになりたい人は必見の内容だ。 イントロダクション 私は先日、こういったツイートをした。 エンジニアになってから常々「仕事の生産性を上げるためには生活習慣の改善が必要だ」と思うようになり...
%1$s
未経験からポートフォリオなしでエンジニア転職するとどうなるのか
2020.7.8
おはよう。   私は今年(2019年)の7月にサーバーサイドエンジニアに転職をした。   今日は、そんな私が実際に体験したエンジニア転職にまつわる恐い話をしようと思う。   それでは早速書いていく。  …...
技術ブログとは何なのかを真面目に調べてみた
2020.7.8
おはよう。   私は昨日から技術ブロガーになったのだが、まずはじめに私は何を書くべきなのかわからずに初日はやっていることの紹介で記事が終わってしまった。     今日は「技術ブログの書き方」を勉強してきたので皆…...




  • やっぱりエンジニアは最高だぜ!!
  • 【大真面目】「Web制作で月5万円を稼ぐ!」をやることにした
  • ラーメン屋でブログは書ける
  • 【絶望】「10万時間」無駄にする人のやっていること
  • 休日のスカスカの電車内でダラダラする時間が最高
  • 【現役エンジニアが語る】実務でしか学べないこと3選