使用俄罗斯玩偶手动过期缓存

时间:2013-03-13 01:46:52

标签: ruby-on-rails ruby-on-rails-4 russian-doll-caching

我有一个用户可以拥有大量已保存的搜索和许多任务。我正在使用以下

缓存它们
- 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_digest gem之前一直在做的缓存失效,但我无法弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:0)

您可以使用集合的最新updated_at,as the Rails Guide on caching演示,而不是使用用户的缓存键来使集合过期。 E.g。

- 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