我有以下查询:
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
它似乎没有显示任何性能改进,也没有在添加新帖子时更新。
只缓存查询的最佳方法是什么?
谢谢。
答案 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
,它只会缓存查询和数据,而不是动作的布局。