2012-01-18 120 views
1

我沒有看到明顯的東西:緩存策略在rails中。存在新對象的緩存策略導致緩存失效

我有一個價格表,在特定時間記錄價格。所以目前的價格將是價格表中的最後一行。非常頻繁地,查詢表以顯示條目,因此緩存取回對於停止(非常)頻繁地查詢到數據庫是非常好的。

因此,據我所見,我的整個應用程序將完全緩存該數據,直到添加新行爲止

軌道緩存處理得好嗎?我看到更新活動記錄對象的示例,您將超時緩存過期並強制更新對象以供再次檢索 - 但我希望將對象集合(例如Price.find(:all))緩存到Price.find(:所有)都包含一個新對象,因此向數據庫添加新行將不得不使緩存過期並強制進行新的檢索 - 新的價格可能是最近的幾天,或者可能只持續幾分鐘。)

如果不是不言而喻,這是我第一次看緩存。我將嘗試在heroku上部署memcache。

非常感謝!

編輯:只是認爲它可能是有用的指出,鐵軌控制器只呈現JSON請求 - 豐富的單頁面應用程序 - 所以緩存的主要內容是數據庫查詢。這就是爲什麼它讓我感到困惑,我看到了部分緩存,頁面緩存,但我很努力地理解上面希望描述的緩存類型。

戴夫

回答

0

要緩存你的價格,你可以使用下面的。將它放置在可重用的地方會很有幫助(例如您的模型)。

cached_prices = Rails.cache.fetch("cached_prices", :expires_in => 300) do 
    Price.find(:all) 
end 

上面的代碼高速緩存5分鐘(300秒)的查詢。爲了手動刪除緩存條目(說時創建一個新的價格條目),請撥打以下:

Rails.cache.delete("cached_prices") 

爲了使這個簡單,你可以將緩存中的價格模型觀察員刪除代碼。

你可以在這裏找到所有類型的緩存你已經獲得了更多的信息給你:http://guides.rubyonrails.org/caching_with_rails.html

+1

您還可以瞭解此間觀察家:http://guides.rubyonrails.org/active_record_validations_callbacks.html – 2012-01-18 19:21:27