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