0

次のクエリがあります。

def home
    @posts = Post.where(:isGroup => "public").order('created_at DESC').page(params[:page]).per(20)
end

Post モデルに新しい Post が追加されない限り、このクエリをキャッシュしたいと思います。

私が使うとき

expires_in 5.minutes, public: true

クエリだけでなくアクション全体をキャッシュします (結果は無限スクロールの始まりであり、ページにはログインがあるため、ページ全体が台無しになります)。

私がする時:

cache "home_post", expires_in: 10.minutes do
     @posts = Post.where(:isGroup => "public").order('created_at DESC').page(params[:page]).per(20)
end

パフォーマンスの向上は見られず、新しい投稿が追加されても更新されません。

クエリをキャッシュする最良の方法は何ですか?

ありがとうございました。

4

2 に答える 2

0

Rails.cache.writeオブジェクトをそのままキャッシュすることができ、Rails.cache.read必要なものです。詳細はこちらhttps://devcenter.heroku.com/articles/caching-strategies#low-level-caching

投稿が作成されるたびにキャッシュを消去するには、キャッシュを使用after_createしてからスイープします。詳細については、こちらの例を参照してください http://guides.rubyonrails.org/caching_with_rails.html#sweepers

于 2013-04-19T00:20:11.087 に答える
0

caches_action :home, :expires_in => 5.minutes, :layout => false, :public => trueアクションのレイアウトではなく、クエリとデータのみをキャッシュすることもできます。

于 2013-09-25T19:28:10.950 に答える