9.1 キャッシュ

ページキャッシュを利用する

Rails4以降で利用するにはactionpack-page_cachingもgemをインストールすることが必要です。

ページキャッシュは描画されたレスポンスを、静的ファイルとしてファイルシステムに保管します。 これによりウェブサーバーの段階で結果を返却することが可能なので非常に高速に動作します。

アクションキャッシュを利用する

Rails4以降で利用するにはactionpack-action_cachingもgemをインストールすることが必要です。

ページ全体をキャッシュをするという点ではページキャッシュと同じですが、ウェブサーバーで処理は完結せずにRailsまで届くため、before_actionなども利用することができ柔軟にキャッシュすることができます。

フラグメントキャッシュを利用する

フラグメントキャッシュはビューの一部をキャッシュすることができる機能で、ページ内のコンポーネントごとにキャッシュや期限切れを個別に設定したい場合は、フラグメントキャッシュを使います。

フラグメントキャッシュを李朝するには、ビューの中でロジックのフラグメントをキャッシュブロックでラップし、次回のリクエストでそれをキャッシュストアから取り出して表示します。

<% @posts.each do |post| %>
  <% cache post do %>
    <%= render post %>
  <% end %>
<% end %>

コレクションキャッシュを利用する

renderメソッドで、コレクションを指定してパーシャルを表示するときもキャッシュを利用することができます。以下のようにrenderメソッドのcacheオプションをtrueにすることでコレクションのキャッシュが有効になります。

<%= render partial: 'posts/post', collection: @posts, cached: true %>

SQLキャッシュを利用する

クエリキャッシュはSQLで返ってきた結果をキャッシュする機能です。リクエストごとに、一度発行されたクエリが見つかると、データベースへのクエリを実行する代わりに、以前の実行結果を利用します。

class PostsController < ApplicationController

  def index
    @posts = Post.all # 初回のクエリ
    @posts = Post.all # 同じクエリの再実行
  end
end

DBに対し、同じクエリが2回実行されると2回目以降はアクセスされません。1回目のクエリの結果がメモリ上のクエリキャッシュに保存されているので、2回目のクエリではメモリから結果を読み出します。

注意点としてクエリキャッシュはアクションの開始時に作成され、アクションの終了時に破棄されるのでクエリキャッシュはアクションの実行中しか有効ではありません。

キャッシュストアを指定する

Railsのキャッシュストアとして利用できるのは以下の種類があります。

メモリキャッシュ :memory_storeで同じRubyプロセス内のメモリに保持されます。sizeでキャッシュのサイズを指定することができます。

config.cache_store = :memory_store, { size: 64.megabytes }

ファイルキャッシュ :file_storeでファイルシステムに保存します。の保存先のパスを指定する必要があります。

config.cache_store = :file_store, '/tmp/cache'

Memcachedへのキャッシュ

Memcachedにキャッシュを行うことができます。初期化時にMemcachedサーバのアドレスを指定する必要があります。

config.cache_store = :mem_cache_store, cache.256.tips

results matching ""

    No results matching ""