2016-03-31 3 views
1

私はレール4アプリを持っています。私は何らかの形で異なるキャッシュキーを区別しなければならないが、命名規則を知らない。rails4キャッシングの命名規則

FIRST例:

私は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 %> 

SECOND例:私も持っている

nの問題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ページに配置する予定です。これは、私の例の内部キャッシングのように全く同じです。キーが異なっていなければならない場合は、内部の外部キャッシュキーに名前を付けるのがどのような規則ですか?

答えて

1

ロシア人形キャッシングの記事によると、自分でcache_keyを設定する必要はないと思います。レールに残しておくと、cache_key autoが生成されます。例えば、テンプレートダイジェストが同じになりますけれども@tasks = Task.incomingcache_keyは、名前空間については、views/task/1-20160330214154/task/2-20160330214154/d5f56b3fdb0dbaf184cc7ff72208195eviews/task/3-20160330214154/task/4-20160330214154/84cc7ff72208195ed5f56b3fdb0dbaf1

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

セカンドのようなもので@tasks = Task.completed異なるべきであるが、@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 %> 

アプリ/ビュー/製品/ show.html.erbのキャッシュキーは、ビュー/製品/ 123から20160310191209/707c67b2d9fb66ab41d93cb120b61f46のようなものになります。最後のビットは、テンプレートファイル自身とそのすべての依存関係のMD5です。テンプレートまたは依存関係のいずれかを変更すると、キャッシュが自動的に期限切れになるように変更されます。

さらに読むために:https://github.com/rails/cache_digests

+0

私の質問は少し奇妙な構造だった。あなたの答えの一部が私の2番目の例を参照しているかどうか教えてください(最初の例と区別するために '@ product'を使用しています)。 –

+0

@SzilardMagyar私は答えを更新しました。最後の部分を見てください。 – abookyun

+0

abookyun、私は私の質問の第2部分を更新しました、それは少し曖昧だったので、あなたはそれを誤解しました。 –

1

最後に文字列を置くことをお勧めします。それは本当にあなたにとって理にかなったものでなければなりません。