2011-12-23 10 views
2

この高価なdbクエリは非常に頻繁に変化しません。RoRで高価なクエリ結果をキャッシュする

私が本当に気にしているのは、このクエリで95%の時間が生データの50 kb文字列です。

ページのキャッシュを使用して高価で使用頻度の高いクエリの結果をキャッシュすることは、「RoRの方法」と完全に反対ですか?

dbサーバー自体の結果セットをキャッシュすることは、クエリ結果から.collect {} edのデータのほんの一部を気にしているので、ちょっと残念です。 ページキャッシングは、いくつかの異なるページがこのデータを利用しており、すべてが同じものをキャッシングしており、周囲のビューだけが変化しているので無駄です。あなたが望むように

+0

"RoRのやり方"に反対することはあまり気にしません。あなたの問題に対する解決策があれば、それに満足してください。 DHHはあなたの家に来なくてキーボードを盗むことはありません;)そう言われているように、フレデリックの答えはおそらくあなたが探しているものです。 – cvshepherd

+0

私はキャッシュを使用する方法を知っています(私たちはmemcacheを使用しています)が、いつそれが適切かどうかはわかりませんでした。私は通常完全にレンダリングされたhtml/javascriptがキャッシュされているのを見たことがあるので、生データをキャッシュするのが「悪い」ものかどうかは分かりませんでした。私は "それのために行く"ことをたくさん聞いているので、私はそれに対していかなる教義もないと仮定しようとしています。ありがとう人々:) – Luke

答えて

4

はレールが

Rails.cache.fetch('cache_key') do 
    # calculations here 
end 

このどちらかが計算を実行し、キャッシュ内のブロックの戻り値を詰め込むか、キャッシュから値を読み込むキャッシュね。

明示的に期限を切るか(Rails.cache.delete)、有効期限を設定するか、世代別キャッシュキーを使用できます。

さまざまなキャッシュストアがありますが、一般的なものの1つはmemcschedです。キャッシュストアを設定する方法の詳細がありますhere

+0

パーフェクト。ダッシュボードのアプリで高価なクエリをキャッシュしていて、今はすばらしい、スピーディーです。 –