我当前的主页显示所有可用类别以及每个类别的所有帖子数量。这当然是在网站上有性能影响,我只是想知道这是否可以缓存?
我不介意缓存是否有点过时,并且每次刷新时帖子的数量都不是100%准确,但我希望它每30分钟只进行一次查询左右。
答案 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,列出缓存中每个类别的类别和帖子。