rails4 缓存命名约定
rails4 caching naming conventions
我有一个 rails 4 应用程序。我必须以某种方式区分不同的缓存键,但不知道命名约定。
第一个例子:
我有一个包含 index
、completed_tasks
和 incoming_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 %>
传入_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 命名内部和外部缓存密钥的约定是什么?
最好始终在末尾放置一个字符串。它真的只需要是对你有意义的东西。
首先,根据Russian Doll Caching一文,我觉得没必要自己设置cache_key
,你可以把它留给rails,它会生成cache_key汽车。例如,@tasks = Task.incoming
的 cache_key
应该与 @tasks = Task.completed
不同,例如 views/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。如果您更改模板或任何依赖项,它将发生变化,从而允许缓存自动过期。
我有一个 rails 4 应用程序。我必须以某种方式区分不同的缓存键,但不知道命名约定。
第一个例子:
我有一个包含 index
、completed_tasks
和 incoming_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 %>
传入_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 命名内部和外部缓存密钥的约定是什么?
最好始终在末尾放置一个字符串。它真的只需要是对你有意义的东西。
首先,根据Russian Doll Caching一文,我觉得没必要自己设置cache_key
,你可以把它留给rails,它会生成cache_key汽车。例如,@tasks = Task.incoming
的 cache_key
应该与 @tasks = Task.completed
不同,例如 views/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。如果您更改模板或任何依赖项,它将发生变化,从而允许缓存自动过期。