rails4缓存命名约定

我有一个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

    

tasks.html.erb

    

incoming_tasks.html.erb

    

第二个例子:

我也有russian-doll-caching的命名惯例的问题:

 products/index.html.erb    _product.html.erb   ....  

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

首先,根据俄罗斯玩偶缓存文章,我认为没有必要自己设置cache_key ,你可以将它留给rails,它会生成cache_key auto。 例如, @tasks = Task.incomingcache_key应该与@tasks = Task.incoming不同,例如views/task/1-20160330214154/task/2-20160330214154/d5f56b3fdb0dbaf184cc7ff72208195eviews/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

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