Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs 菜单
Docs 主页
/ /

查询缓存

在本指南中,您可以学习;了解查询缓存。查询缓存会保存先前查找和聚合查询的结果,并在将来重复使用。 这可以防止 Mongoid 再次执行查询,从而提高应用程序性能并减少数据库负载。

在本节中,您可以学习;了解如何在应用程序中启用查询缓存功能。 您可以使用驱动程序的命名空间或 Mongoid 的命名空间启用查询缓存。

Ruby驾驶员提供了中间件,可以自动为 Rack Web 请求和 Active Job作业运行启用查询缓存。

注意

查询缓存中间件不适应用在 Web 请求或作业之外运行的代码。

Ruby驱动程序提供了一个 Rack 中间件,可在每个 Web请求期间启用查询缓存。以下代码演示了如何在Ruby on Rails应用程序中启用查询缓存中间件:

config/application.rb
# Add Mongo::QueryCache::Middleware at the bottom of the middleware
# stack or before other middleware that queries MongoDB.
config.middleware.use Mongo::QueryCache::Middleware

要学习;了解有关在 Rails 应用程序中使用 Rack 中间件的更多信息,请参阅 Rails 文档中的配置中间件堆栈

Ruby驱动程序为活动作业提供查询缓存中间件。您可以在初始化程序中为所有作业启用它,如以下代码所示:

config/initializers/active_job.rb
# Enable Mongo driver query cache for Active Job
ActiveSupport.on_load(:active_job) do
include Mongo::QueryCache::Middleware::ActiveJob
end

您还可以为特定作业类启用它,如以下代码所示:

class MyJob < ActiveJob::Base
include Mongo::QueryCache::Middleware::ActiveJob
end

要为特定代码段手动启用查询缓存,可以在以下区块中运行代码:

Mongo::QueryCache.cache do
# Include code here ...
end

您可以显式启用和禁用查询缓存,但我们建议在前面的代码示例中使用区块形式。 以下代码演示了如何启用和禁用查询缓存:

begin
Mongo::QueryCache.enabled = true
# Include code here
ensure
Mongo::QueryCache.enabled = false
end

在模型类上调用 first 方法时,会在返回结果时对 _id字段进行升序排序。 如果启用查询缓存,则可能会产生意外行为。

示例,如果您在调用 first 之前对模型类调用 all 方法,则可能期望 first 方法使用 all 中的缓存结果。 但是,由于 Mongoid 对第二次调用进行了排序,因此这两个方法查询数据库并分别缓存结果。

要在调用 first 方法时使用缓存的结果,请对模型类调用 all.to_a.first,如以下示例代码所示:

Band.all.to_a.first

在前面的示例中,链接 to_a 方法运行查询并将结果转换为内存中的大量。 然后,first 方法仅返回第一个大量条目,而不会触发另一个查询并缓存结果。

要学习;了解有关创建过滤条件的更多信息,请参阅指定文档查询指南。

要学习;了解如何自定义持久性目标,请参阅持久性配置指南。

后退

保留查询中的数据

在此页面上