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

Ruby on rails 缓存查询,除非模型更新-rails,ruby-on-rails,ruby-on-rails-3,caching,memcached,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 我希望缓存此查询,除非将新帖子添加到帖子模型中 当我使用 expires_in 5.minutes, public: true 它缓存整个操作,而不仅仅是查询(并且弄乱了整个页面,因为结果是无限滚动的开始,页面有一个登录名) 当我这样做时: cach

我有以下疑问:

def home
    @posts = Post.where(:isGroup => "public").order('created_at DESC').page(params[:page]).per(20)
end
我希望缓存此查询,除非将新帖子添加到帖子模型中

当我使用

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
它似乎没有显示任何性能改进,并且在添加新帖子时也不会更新

缓存查询的最佳方式是什么


谢谢。

您可以按原样缓存对象。
Rails.cache.write
Rails.cache.read
是您所需要的。更多细节在这里


要在每次创建帖子时清理缓存,可以在创建后使用
,然后扫描缓存。有关更多信息,请参见此处的示例

好的,您也可以
缓存动作:home,:expires\u in=>5.minutes,:layout=>false,:public=>true
它只缓存查询和数据,而不缓存动作的布局。

如果我这样做,我会得到一个错误(TypeError(无法转储匿名类):Rails.cache.fetch(“homepage\u posts”,:expires_in=>5.minutes)do@posts=Post.where(:isGroup=>“public”).order('created_at DESC').page(params[:page]).per(20)endI将以这种方式缓存它
Rails.cache.write(“homepage_posts”,Post.where(:isGroup=>“public”).order('created_at DESC').page(params[:page]).per(20)。全部)
.all
缓存记录,而不仅仅是活动记录实例。我也会以同样的方式读取它
Rails.cache.read('homepage\u posts')