【发布时间】:2017-01-12 09:01:02
【问题描述】:
The rails documentation 表示每个操作都会执行 SQL 缓存。但是我不清楚“每一个动作”是什么意思。标准 Rails 工具箱中是否有任何类型的进程可以免于缓存?
例如,ActiveJob 会从 SQL 缓存中受益吗? Rake 任务呢?
【问题讨论】:
标签: ruby-on-rails ruby caching
The rails documentation 表示每个操作都会执行 SQL 缓存。但是我不清楚“每一个动作”是什么意思。标准 Rails 工具箱中是否有任何类型的进程可以免于缓存?
例如,ActiveJob 会从 SQL 缓存中受益吗? Rake 任务呢?
【问题讨论】:
标签: ruby-on-rails ruby caching
运行rack middleware,您会看到use ActiveRecord::QueryCache - 这是负责在请求期间缓存您的查询的中间件。
This method 在动作开始时运行,this method - 在动作完成时运行。
有趣的方法是this one - 它调用查询缓存模块来执行所有的缓存。文档是here。
我的猜测是你可以在任何你喜欢的方法中使用这个模块 - 后台作业、rake 任务等。这个模块默认包含在activerecord 中,因此可以在任务开始时启用查询缓存运行/方法:
ActiveRecord::Base.connection.enable_query_cache!
当方法/任务完成时,执行这两个方法:
ActiveRecord::Base.connection.clear_query_cache
ActiveRecord::Base.connection.disable_query_cache!
注意请记住禁用查询缓存 - 否则缓存将在您可能不需要的地方执行。 还要执行分析并仅在您知道它不会引起副作用的情况下使用此缓存。还有一件事:这是一个单例方法 - 当您启用此缓存时,它会为整个进程启用。
【讨论】: