Scaling Rails Episode #3 - Cache Expiration
キャッシュ失効の話
前回からの続き
Expiring Caches
- controllerのupdate,destroy,createの各メソッドにexpire_pageを書くのはDRYじゃないなー
- コントローラーのafter_filterでexpire_pageをまとめたメソッドをまとめてみた
- appがbiggerになると複数controllerで失効処理が必要なってくるねーどうする?
- application_controller?
- shared objects
- sweepers(失効処理のshared objects)
- observeres the controller
- observses the model
Sweepers
- Sweeperの作り方
- sweepersを置くディレクトリを適当につくる
- config.load_pathにそのディレクトリを追加する
- ActionController::Caching::Sweeperを継承したSweeperクラスを作る
例)
class PostsSweeper < ActionController::Caching::Sweeper observe Post def after_save(post) clear_posts_cache(post) end def after_destroy(post) clear_posts_cache(post) end def clear_posts_cache(post) expire_page :controller => :posts, :action => :index expire_page :controller => :posts, :action => :show, :id => post end end
-
- コントローラーにSweeperを使う定義をかく
class PostsController < ApplicationController caches_page :index, :show cache_sweeper :posts_sweeper
- Sweeper Hooks
- AR Observer Callbacks
- after_createとかafter_destoryとか
- Controller Callbacks
- before/after_
- before_after_
_
- before/after_
- AR Observer Callbacks