我有一个网站我正在实施一些缓存。
在可能的情况下,我使用了动作缓存,并且我有清扫工具,以便在创建/更新模型时使必要的操作失效。
在受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
部分将很少被击中,除非动作过期,否则将被缓存。
答案 0 :(得分:1)
动作缓存在技术上也是片段缓存的类型,它包装了你的片段。因此,您的片段可能会过期,但直到动作缓存过期才会显示。
因此,如果希望您的片段过期,您也需要使该操作过期。但片段缓存并非没有目的。如果操作过期,将使用缓存的片段。
答案 1 :(得分:0)
动作缓存会为您缓存完整的操作。因此,在控制器动作(例如'show_video')上使用动作缓存并在同一视图“show_video”上添加片段缓存不会产生太大影响。您应该明智地使用它们。
另外,正如您所说,片段缓存过期但是当调用该操作时,将呈现缓存操作。因此,在您的情况下,您还需要使动作缓存失效。
我建议你仔细阅读格雷格波拉克的视频演员 check this out