1

假设您想在 Rails 中进行一些低级缓存(例如使用 memcached),并且您希望在应用程序的某个地方只调用 1 个,例如...

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')

...在您的应用程序中(在视图、控制器、帮助程序中...)中的任何地方和多次访问此“书籍”集合。

应该在哪里放置初始“获取”调用以使其工作?

4

2 回答 2

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

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

于 2013-05-07T17:42:37.323 回答
1

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

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

于 2013-05-07T17:25:42.873 回答