💨
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レスポンスキャッシュ