Rails 3:在哪里放一个Rails.cache.fetch“缓存加热器”调用?

时间:2013-05-07 17:14:26

标签: ruby-on-rails caching low-level

假设您想在Rails中执行一些低级别缓存(例如,使用memcached),并且您希望在应用中的某个位置只进行一次调用,例如......

Rails.cache.fetch('books', expires_in: 1.day) do
  Book.offset(offset)
      .limit(limit)
      .select('title, author, number_of_pages')
      .all
end

...在你启动你的应用程序时预热你的缓存,所以你可以使用像...这样的简单调用。

Rails.cache.read('books')

... 任何地方并且在整个应用程序中多次(在视图,控制器,帮助程序......中)访问此“书籍”集合。

应该在哪里进行初始“获取”调用才能使其正常工作?

2 个答案:

答案 0 :(得分:2)

在您发表评论之后,我想澄清一些事情。

如果您需要返回结果,则应始终使用fetch。在Book内的类方法中包含调用以便于访问:

class Book
  def self.cached_books 
    Rails.cache.fetch < ... > 
  end
end

您可以使用不同的方法强制重新创建缓存:

def self.write_book_cache
     Rails.cache.write < ... > 
   end
end

然后在你的初始化程序或rake任务中,你可以这样做:

Book.write_book_cache

这对我来说似乎更易于维护,同时在代码的其余部分保持对缓存的简洁调用。

答案 1 :(得分:1)

我的第一个想法是将它放在初始化器中 - 可能是专门用于此目的(/config/initializers/init_cache.rb或类似的东西)。

应用程序启动时应自动执行(由于位于初始化程序文件夹中)。