1

在 Rails 3.2.8 的开发中,我从 CACHE 中得到了很多这样的行。

CACHE (0.0ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (1, 7)

我知道 rails 正在缓存查询以提高性能。所有缓存行都在 0,0 毫秒内完成。所以,这可能不是问题。

问题

我是否应该尝试改进我的代码/设计以摆脱如此多的缓存?它会提高性能吗?

4

1 回答 1

3

缓存通常会提高而不是损害应用程序性能。默认情况下,在单个请求中,完全相同的查询只会运行一次,其余时间的结果将被缓存。这就是您通过 CACHE 日志条目观察到的情况。

然而,这意味着您的应用程序尝试多次执行完全相同的查询。所以是的,我建议您查看模型的哪些部分被反复请求,并可能保留物化.all结果并将它们作为参数传递而不是查询您的模型。

更准确的答案当然取决于您的具体情况,但您的直觉是正确的 - 大量缓存命中暗示可能会改进一点的设计。

还有一点需要注意:如果要确保查询执行非缓存,请将其包装在 uncached 方法中,如下所示:

  ActiveRecord::Base.uncached do
    # your code here   
  end
于 2012-11-19T09:34:10.870 回答