俄罗斯娃娃缓存
你可能希望将缓存的片段嵌套在其他缓存的片段中。这叫做 Russian doll caching
。
Russian doll caching
的优点是,如果更新单个产品,则在重新生成外部片段时可以重用所有其他内部片段。
如上一节所述,如果 updated_at
的值更改为缓存文件直接依赖的记录,则缓存文件将过期。但是,这不会使片段嵌套在其中的任何缓存到期。
例如,采用以下视图:
<% cache product do %>
<%= render product.games %>
<% end %>
这反过来呈现这种观点:
<% cache game do %>
<%= render game %>
<% end %>
如果游戏的任何属性改变,则 updated_at
值将被设置为当前时间,从而使缓存到期。
但是,由于产品对象不会更改 updated_at
,因此该缓存不会过期,你的应用将提供陈旧数据。为了解决这个问题,我们将模型与触摸方法结合在一起:
class Product < ApplicationRecord
has_many :games
end
class Game < ApplicationRecord
belongs_to :product, touch: true
end