为什么Rails不缓存SQL查询?

时间:2015-03-19 14:27:26

标签: sql ruby-on-rails caching activerecord

根据Rails Guides

  

查询缓存是一种Rails功能,用于缓存返回的结果集   通过每个查询,以便如果Rails再次遇到相同的查询   该请求,它将使用缓存的结果集而不是运行   再次查询数据库。

然后是一个示例,其中在控制器的操作中执行相同的查询:

class ProductsController < ApplicationController

  def index
    # Run a find query
    @products = Product.all

    ...

    # Run the same query again
    @products = Product.all
  end

end

在我的视图布局中,我调用Category.pluck(:id)。在开发日志中,我会多次看到这一行:

SELECT "categories"."id" FROM "categories"

即使我将其设置为config.action_controller.perform_caching = true进行开发,也会发生这种情况。为什么会这样?

1 个答案:

答案 0 :(得分:2)

查询缓存来自Rack。

运行rake middleware

寻找ActiveRecord::QueryCache

如果你的中间件中有这个,那么应该启用SQL缓存,除非其他东西正在关闭它。

以下是有关查询缓存的一些文档:

http://edgeapi.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/QueryCache.html

和机架代码

http://api.rubyonrails.org/classes/ActiveRecord/QueryCache.html