1

Rails 4アプリがあります。どういうわけか異なるキャッシュ キーを区別する必要がありますが、命名規則がわかりません。

最初の例:

indexcompleted_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 %>

incoming_tasks.html.erb

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

2 番目の例:

の命名規則にも問題があります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キーが異なる必要がある場合、内側のキャッシュキーと外側のキャッシュキーに名前を付けるレールの規則は何ですか?

4

2 に答える 2

1

まず、Russian Doll Caching の記事によると、自分で を設定する必要はないと思いcache_keyます。Rails に任せればいいと思います。cache_key auto が生成されます。たとえば、cache_keyofは、 andのようなものと@tasks = Task.incomingは異なる必要があります。@tasks = Task.completedviews/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

第 3 に、名前空間に関しては、接尾辞よりも接頭辞を好みます。すなわち

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

2番目の例として、これはうまくいくと思います。

<% 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 を参照してください。

于 2016-03-31T15:14:42.520 に答える
1

常に最後に文字列を配置することをお勧めします。それは本当にあなたにとって意味のあるものである必要があります.

于 2016-03-31T14:59:49.743 に答える