rails 是否为不涉及控制器的操作执行 SQL 缓存?

l85*_*85m 1 ruby caching ruby-on-rails

rails 文档说每个操作都会执行 SQL 缓存。但是我不清楚“每个动作”是什么意思。标准 rails 工具箱中是否有任何类型的进程可以免于缓存?

例如,ActiveJob 会从 SQL 缓存中受益吗?Rake 任务呢?

Mag*_*uss 5

运行rack middleware你会看到use ActiveRecord::QueryCache——这是负责在请求期间缓存你的查询的中间件。

这个方法在动作开始时运行,这个方法- 当动作完成时运行。

有趣的方法是这个- 它调用查询缓存模块来执行所有缓存。文档在这里

我的猜测是,您可以在任何您喜欢的方法中使用此模块 - 后台作业、rake 任务等。activerecord默认情况下包含此模块,因此要在任务/方法开始时启用查询缓存运行:

ActiveRecord::Base.connection.enable_query_cache!
Run Code Online (Sandbox Code Playgroud)

当方法/任务完成时,执行这两个方法:

ActiveRecord::Base.connection.clear_query_cache
ActiveRecord::Base.connection.disable_query_cache!
Run Code Online (Sandbox Code Playgroud)

注意请记住禁用查询缓存 - 否则缓存将在您可能不想要的地方执行。还要执行分析并仅在您知道它不会引起副作用的情况下使用此缓存。还有一件事:这是一种单例方法 - 当您启用此缓存时,它会在整个过程中启用。