2012-02-16 187 views
0

我有一個網站,我正在實施一些緩存。Rails碎片緩存策略

在可能的情況下,我已經使用了動作緩存,並且我已經有了清理器來在創建/更新模型時終止必要的操作。

在這一受到caches_action的意見我也片段緩存一些諧音,使內部分我有類似:

<% cache('video_content') do %> 
    Some content here 
<% end %> 

在我video_sweeper我試圖終止該片段用:

expire_fragment('video_content') 

雖然這個片段沒有過期。

因爲我已經使用caches_action,是由於某種原因被忽略的片段?即我是否需要在使用caches_action或片段緩存之間做出選擇?

如果是這種情況,我需要將每個動作視圖到期,這部分出現在這意味着我的清掃人員會變得非常複雜,更不用說維護頭痛了。

所以我的問題很大程度上是爲什麼我的分段緩存在我的清掃器中調用時會失效,是因爲我也使用了caches_action

更新: 進一步挖掘到我的日誌中,我實際上可以看到清掃工正在過期我的片段。

Expire fragment views/video_content (0.7ms) 

但是,在到期之前在控制檯中玩耍,片段似乎不存在。

ruby-1.9.2-p136 :004 > Rails.cache.exist?('views/video_content') 
=> false 

同樣,這讓我覺得,因爲我使用caches_action,部分很少會被擊中,當行動到期除非,被緩存。

回答

1

動作緩存技術上也是包裝片段的片段緩存類型。因此,您的片段可能會過期,但在動作緩存過期之前這些內容將不可見。

所以,如果你想讓你的片段到期,你也需要過期。但片段緩存並非沒有目的。如果操作過期,將使用緩存的片段。

0

動作緩存會緩存您的完整動作。因此,在控制器動作上使用動作緩存(如'show_video'),並在同一視圖「show_video」上添加片段緩存不會有太大影響。您應該明智地使用它們。

進一步說,片段高速緩存到期,但是當調用該操作時,將呈現高速緩存的操作。所以在你的情況下,你也需要使你的動作緩存失效。

我建議你去通過視頻廣播格雷格·波拉克check this out

+0

感謝您的回答。將檢查出這些視頻,非常感謝您的支持。 – Pete 2012-03-30 09:32:34