2012-03-07 78 views
0

假設我想使用dalli存儲緩存(片段)視圖。這是否意味着像這樣做也會使用memcache來實現可能的DB緩存?Rails 3緩存問題

Rails.cache.fetch("something") { smth } 

另外,如果我這樣做:

Author.all 

Rails的控制檯會告訴我,它的查詢的數據庫,但如果我再次運行Author.all,它會告訴我,結果被檢索來自緩存。我什麼時候想明確使用Rails.cache以及何時應該依靠ActiveRecord來執行緩存?

回答

1

取和讀操作獲得從當前配置, 例如從文件系統如果緩存 店:file_store,或者從Memcached的 服務器如果商店是:mem_cache_store的 緩存存儲的物品。 因此,如果你想使用Memcached的用於 片段緩存,您必須相應地配置 cache_store:

ActionController::Base.cache_store = :mem_cache_store, "cache-1.example.com" 

這是推薦使用fragment caching 如果有涉及許多 查詢而很少改變大型,複雜的意見或緩慢。 Fragement 緩存是完全在 靜態頁面(快速但固定)和動態頁面 (緩慢但可變)之間的良好折衷。如Ryan Bates在其Railscast about fragment caching中所說,如果您需要緩存頁面的某一部分而不是整個頁面,則片段緩存就是 的路徑。

頁面和動作緩存更好,它們很棒 用於加速頁面的性能,但如果它包含用戶特定的內容,則會出現問題 。在這種情況下 可以使用dynamic page caching。 Stackoverflow 使用了類似的技術。

SQL Caching只能持續 一個動作。