« あたり | トップページ | 雛人形 »

2011.02.16

Railsでmemcachedとnamed_scopeを組み合わせて使ってハマった。

以下のようなコードを書いていて、クエリの結果をキャッシュしているはずなのに、SQLが発行されるなぁ、、何でだろうなぁ、、と思っていた。


def recent_entries
get_cache("recent_entries") do
Entry.newly.user(self.id).limit(10)
end
end


で、結論としては、named_scopeは値が初めて評価される時にSQLが実行されるので、上記状態だとまだ、SQLが未発行の状態でキャッシュされる。

telnet localhost 11211

で実際にキャッシュの内容を確認すると以下のようになっている。

get app:User:1:recent_entries
VALUE app:User:1:recent_entries 1 224
o:$ActiveRecord::NamedScope::Scope:@proxy_scopeo;;o;c
Entries:)@current_scoped_methods_when_defined0:@proxy_options{:conditions"#user_id = ? i?{:
order"created_at DESC{:
limiti

END


つまり、まだnamed_scopeのまま。

そして、キャッシュしているつもりなのに全然負荷が落ちないという結果に。。


named_scopeを強制発行する方法がわからないので、とりあえず、

def recent_entries
get_cache("recent_entries") do
Entry.newly.user(self.id).limit(10).collect{|i| i}
end
end


とした。

|

« あたり | トップページ | 雛人形 »

ruby」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Railsでmemcachedとnamed_scopeを組み合わせて使ってハマった。:

« あたり | トップページ | 雛人形 »