2014-01-09 39 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調用位於高速緩存塊內,因此只有在存在高速緩存未命中時纔會執行。