1

就在我如何缓存 jbuilder 视图和 activerecord 查询的一些建议之后。我目前这样做的方式感觉不对,因为我本质上是在缓存中存储了两件事。我可以以某种方式结合它吗?我需要缓存 SQL 记录,这样数据库就不会被击中,而且视图文件也需要最大化速度。

# Controller
@posts = Rails.cache.fetch ["posts"], :expires_in => 1.hour do
  Post.all.limit(10).order("id desc").to_a
end

# Jbuilder view
json.cache! ["posts"], :expires_in => 1.hour do |json|
    json.array! @posts do |post|
      json.id post.id
      json.title post.title
    end
 end
4

1 回答 1

1

我认为你想多了,除非那个 activerecord 查询真的很慢。缓存机制真的很聪明,它会拉你的对象来检查updated_at. 如果更新,构建 json 响应。如果没有,则提供先前构建的服务。通常,这可以将 2 秒的工作缩短到 10 毫秒,或者到您的初始数据库查询所需的任何时间。

但是,如果您坚持,此答案显示了一种方法。https://stackoverflow.com/a/23783119/252799 请注意,activerecord 调用位于缓存块内,因此只有在缓存未命中时才会执行。

于 2014-05-21T12:38:27.377 回答