Rails缓存ActiveRecord结果

时间:2016-12-25 01:19:45

标签: ruby-on-rails ruby caching activerecord

我当前的主页显示所有可用类别以及每个类别的所有帖子数量。这当然是在网站上有性能影响,我只是想知道这是否可以缓存?

我不介意缓存是否有点过时,并且每次刷新时帖子的数量都不是100%准确,但我希望它每30分钟只进行一次查询左右。

2 个答案:

答案 0 :(得分:2)

在Rails中,您可以缓存几乎所有内容。

您可以缓存部分或查询。你也可以手动使它们过期。

例如

cache('categorylist') do
     render partial: 'such'
end

post.rb模型中,在每次创建帖子后,重置此项并强制它在下次运行时进行评估

after_create {
    Rails.cache.delete('categorylist')
}

这样,只有在创建新帖子时才会评估(并写入缓存)。所有其他时间,它将从缓存中获取。

答案 1 :(得分:0)

ActiveRecord缓存查询,以便不必重新执行。但是,这种缓存在请求之间不会持续存在。查看缓存可能对您更有效 - 我会查看片段缓存,可在此处找到rails文档:http://edgeguides.rubyonrails.org/caching_with_rails.html

问题的关键在于,你可以在渲染对象时缓存对象(来自上面提到的文档):

database

这会将每个产品写入键/值存储区。它会记录数据的<% @products.each do |product| %> <% cache product do %> <%= render product %> <% end %> <% end %> 时间戳,以便您不会提供陈旧数据。

使用上面示例中的格式,您可以存储html,列出缓存中每个类别的类别和帖子。