2014-01-09 69 views
1

就如何缓存jbuilder视图和activerecord查询的一些建议。我现在做这件事的方式感觉不对,因为我实际上在缓存中存储了两件东西。我可以以某种方式组合吗?我需要缓存SQL记录,以便数据库不会受到影响,并且还需要查看文件以最大限度地提高速度。Rails的jbuilder缓存+查询

# Controller 
@posts = Rails.cache.fetch ["posts"], :expires_in => 1.hour do 
    Post.all.limit(10).order("id desc").to_a 
end 

# Jbuilder view 
json.cache! ["posts"], :expires_in => 1.hour do |json| 
    json.array! @posts do |post| 
     json.id post.id 
     json.title post.title 
    end 
end 

回答

1

我觉得你这个得太多,除非ActiveRecord的查询实在是太慢了。缓存机制非常聪明,会拉你的对象来检查updated_at。如果更新,建立json响应。如果没有,请为之前建造的服务。通常这可能需要2秒的工作时间缩短到10毫秒,或者无论什么时候您的初始数据库查询需要。

但是,如果你坚持,这个答案显示出一种方法。 https://stackoverflow.com/a/23783119/252799 请注意,activerecord调用位于高速缓存块内,因此只有在存在高速缓存未命中时才会执行。