在 Rails 3.2.8 的开发中,我从 CACHE 中得到了很多这样的行。
CACHE (0.0ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (1, 7)
我知道 rails 正在缓存查询以提高性能。所有缓存行都在 0,0 毫秒内完成。所以,这可能不是问题。
问题
我是否应该尝试改进我的代码/设计以摆脱如此多的缓存?它会提高性能吗?
在 Rails 3.2.8 的开发中,我从 CACHE 中得到了很多这样的行。
CACHE (0.0ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (1, 7)
我知道 rails 正在缓存查询以提高性能。所有缓存行都在 0,0 毫秒内完成。所以,这可能不是问题。
问题
我是否应该尝试改进我的代码/设计以摆脱如此多的缓存?它会提高性能吗?
缓存通常会提高而不是损害应用程序性能。默认情况下,在单个请求中,完全相同的查询只会运行一次,其余时间的结果将被缓存。这就是您通过 CACHE 日志条目观察到的情况。
然而,这意味着您的应用程序尝试多次执行完全相同的查询。所以是的,我建议您查看模型的哪些部分被反复请求,并可能保留物化.all
结果并将它们作为参数传递而不是查询您的模型。
更准确的答案当然取决于您的具体情况,但您的直觉是正确的 - 大量缓存命中暗示可能会改进一点的设计。
还有一点需要注意:如果要确保查询执行非缓存,请将其包装在 uncached 方法中,如下所示:
ActiveRecord::Base.uncached do
# your code here
end