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 user并手动使我在使用cache_digestgem 之前一直在做的缓存过期,但我不知道该怎么做。

4

1 回答 1

0

正如Rails Guide on缓存所展示的,您可以使用集合的最新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 回答