💨

Caching(キャッシュ)

繰り返し演算を減らしレスポンス速度を劇的に向上

Railsのキャッシュは複数レベルで動作します。

1. Fragment Caching(最も多く使用): cache @post do ... end ブロックでビュー断片をキャッシュ。@postのupdated_atが変更されるとキャッシュが自動無効化。

2. Russian Doll Caching(ネストキャッシュ): キャッシュブロックをネストして使用。子(comment)変更時は該当キャッシュのみ更新、親(post)変更時は全体が更新。belongs_to :post, touch: trueで連鎖無効化を設定。

3. Low-Level Caching: Rails.cache.fetch("key", expires_in: 1.hour) { コストの高い演算 } 形式で任意の値をキャッシュ。

ストア: Memory Store、Redis、Memcached、Solid Cache(Rails 8)

キーポイント

1

<% cache @model do %> — Fragment Cacheでビュー断片をキャッシュ

2

Modelのupdated_atベースの自動キャッシュキー生成 + 無効化

3

Russian Doll: ネストキャッシュで細かい無効化

4

belongs_to :post, touch: true — 子変更時に親キャッシュも無効化

5

Rails.cache.fetch("key", expires_in: 1.hour) { コストの高い演算 }

6

config.cache_store = :redis_cache_store — キャッシュストア設定

メリット

  • レスポンス速度数十倍向上
  • DB負荷大幅削減
  • updated_atベースの自動無効化
  • Russian Dollで細かいキャッシュ管理

デメリット

  • キャッシュ無効化戦略の設計が必要
  • 古いデータ表示のリスク
  • キャッシュストア管理(Redis、メモリ)
  • デバッグ時キャッシュのため変更が見えないことがある

ユースケース

投稿一覧/詳細ページキャッシュ サイドバー/ナビゲーションキャッシュ コストの高い集計結果キャッシュ APIレスポンスキャッシュ