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

好吧,你也可以caches_action :home, :expires_in => 5.minutes, :layout => false, :public => true,它只会缓存查询和数据,而不是动作的布局。

于 2013-09-25T19:28:10.950 回答
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 回答