假设您想在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')
... 任何地方并且在整个应用程序中多次(在视图,控制器,帮助程序......中)访问此“书籍”集合。
应该在哪里进行初始“获取”调用才能使其正常工作?
答案 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
或类似的东西)。
应用程序启动时应自动执行(由于位于初始化程序文件夹中)。