Overview
在本指南中,您可以学习;了解查询缓存。查询缓存会保存先前查找和聚合查询的结果,并在将来重复使用。 这可以防止 Mongoid 再次执行查询,从而提高应用程序性能并减少数据库负载。
启用查询缓存
在本节中,您可以学习;了解如何在应用程序中启用查询缓存功能。 您可以使用驱动程序的命名空间或 Mongoid 的命名空间启用查询缓存。
Automatic
Ruby驾驶员提供了中间件,可以自动为 Rack Web 请求和 Active Job作业运行启用查询缓存。
注意
查询缓存中间件不适应用在 Web 请求或作业之外运行的代码。
为机架 Web 请求启用查询缓存
Ruby驱动程序提供了一个 Rack 中间件,可在每个 Web请求期间启用查询缓存。以下代码演示了如何在Ruby on Rails应用程序中启用查询缓存中间件:
# 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驱动程序为活动作业提供查询缓存中间件。您可以在初始化程序中为所有作业启用它,如以下代码所示:
# 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 方法仅返回第一个大量条目,而不会触发另一个查询并缓存结果。
更多信息
要学习;了解有关创建过滤条件的更多信息,请参阅指定文档查询指南。