rails4缓存命名约定

时间:2016-03-31 14:29:38

标签: ruby-on-rails caching fragment-caching

我有一个rails 4 app。我必须以某种方式区分不同的缓存键,但不知道命名约定。

第一个例子:

我有一个包含indexcompleted_tasksincoming_tasks操作的任务模型。 A虽然因为分页而具有相同的实例名称(@tasks)。

目前,缓存键的名称如下所示。我的问题:1。缓存密钥结构是否足够好? 2.将键的各部分放入数组的顺序是否重要?例如,[@tasks.map(&:id), @tasks.map(&:updated_at).max, 'completed-tasks']优于['completed-tasks', @tasks.map(&:id), @tasks.map(&:updated_at).max]

completed_tasks.html.erb

<% cache([@tasks.map(&:id), @tasks.map(&:updated_at).max, 'completed-tasks']) do %>
  <%= render @tasks %>
<% end %>

tasks.html.erb

<% cache([@tasks.map(&:id), @tasks.map(&:updated_at).max]) do %>
  <%= render @tasks %>
<% end %>

incoming_tasks.html.erb

<% cache([@tasks.map(&:id), @tasks.map(&:updated_at).max, 'incoming-tasks']) do %>
  <%= render @tasks %>
<% end %>

第二个例子:

我也对russian-doll-caching

的命名惯例有疑问
products/index.html.erb

<% cache([@products.map(&:id), @products.map(&:updated_at).max]) do %>
  <%= render @products %>
<% end %>

_product.html.erb 

<% cache(product) do %>
  <%= product.name %>
  ....
<% end %>

这个版本是否足够好,或者我总是应该在外部和内部缓存键数组中放置一些字符串,以避免在其他页面上使用类似命名的缓存键出现问题。例如,我计划将<% cache(@product) do %>放在profile#show页面上,这与我的示例中的内部缓存完全相同。如果键必须不同,那么rails约定是将内部高速缓存键命名为内部吗?

2 个答案:

答案 0 :(得分:1)

最好始终将字符串放在最后。它真的只需要对你有用的东西。

答案 1 :(得分:1)

首先,根据俄罗斯玩偶缓存文章,我认为没有必要自己设置cache_key,你可以将它留给rails,它会自动生成cache_key。例如,cache_key的{​​{1}}应与@tasks = Task.incoming @tasks = Task.completedviews/task/1-20160330214154/task/2-20160330214154/d5f56b3fdb0dbaf184cc7ff72208195e

之类的views/task/3-20160330214154/task/4-20160330214154/84cc7ff72208195ed5f56b3fdb0dbaf1不同
cache [@tasks, 'incoming_tasks'] do
  ...
end

其次,对于命名空间,虽然模板摘要是相同的,但@tasks摘要将是不同的。所以在这种情况下没有命名空间似乎没问题。

cache @tasks do
  ...
end

第三,当涉及到命名空间时,我更喜欢前缀而不是后缀。即

cache ['incoming_tasks', @tasks] do
  ...
end

作为第二个例子,我认为这样做会很好。

<% cache @product do # first layer cache %>
  <% cache @products do # second layer cache %>
    <%= render @products %>
  <% end %>

  <% cache @product do # second layer cache %>
    <%= product.name %>
    ....
  <% end %>
<% end %>

app / views / products / show.html.erb的缓存键将类似于views / product / 123-20160310191209 / 707c67b2d9fb66ab41d93cb120b61f46。最后一位是模板文件本身的MD5及其所有依赖项。如果更改模板或任何依赖项,它将发生更改,从而允许缓存自动过期。

进一步阅读:https://github.com/rails/cache_digests