1

多くの保存された検索と多くのタスクを持つことができるユーザーがいます。私は以下を使用してそれらをキャッシュしています

- cache user do
  - user.tasks.each do |task|
    - cache task do
      # do something with task

- cache user do
  - user.saved_searches.each do |search|
    - cache search do
      # do something with search

touchこれらのレコードのいずれかが更新されるたびに、オプションを介してユーザーを更新するオプションを追加しました。私が明確にしたい問題はこのシナリオです:

その検索のキャッシュと、事実上、ユーザーのキャッシュを期限切れにする検索を更新しました。ユーザーのキャッシュの有効期限が切れているため、user.tasksが実行されます。

これを防ぐ方法はありますか?

cache usergemを使用する前に行っていたキャッシュにキーを追加して手動で期限切れにすることを考えてcache_digestいますが、その方法がわかりません。

4

1 に答える 1

0

コレクションの期限切れにユーザーのキャッシュ キーを使用する代わりに、キャッシングに関する Rails ガイドが示すように、コレクションの最新の updated_at を使用できます。例えば

- cache("user-tasks/#{user.id}-#{user.tasks.maximum(:updated_at).try(:to_i)}") do
  - user.tasks.each do |task|
    - cache task do
      # do something with task

- cache("user-searches/#{user.id}-#{user.saved_searches.maximum(:updated_at).try(:to_i)}") do
  - user.saved_searches.each do |search|
    - cache search do
      # do something with search
于 2015-03-08T17:52:38.737 に答える