缓存查询,除非模型更新 - rails

时间:2013-04-19 00:11:26

标签: ruby-on-rails ruby-on-rails-3 caching memcached

我有以下查询:

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

除非将新帖子添加到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

它似乎没有显示任何性能改进,也没有在添加新帖子时更新。

只缓存查询的最佳方法是什么?

谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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