Visão geral
Neste guia, você aprenderá sobre cache de query. O cache de query salva os resultados de queries de localização e agregação anteriores e os reutiliza no futuro. Isso impede que o Mongoid execute as queries novamente, aumentando o desempenho do aplicação e reduzindo a carga do banco de dados .
Habilitar cache de query
Nesta seção, você pode aprender como habilitar o recurso de cache de query em seu aplicação. Você pode habilitar o cache de query usando o namespace do driver ou o namespace do Mongoid.
Automatic
The Ruby driver provides middleware to automatically enable the query cache for Rack web requests and Active Job job runs.
Observação
O middleware de cache de query não se aplica ao código executado fora de solicitações ou trabalhos da web.
Ativar cache de query para solicitações web de Rack
O driver Ruby fornece um middleware Rack que habilita o cache de query durante cada solicitação da web. O código a seguir demonstra como habilitar o Query Cache Middleware em uma aplicação 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
Para saber mais sobre como usar o middleware Rack em aplicativos Rails, consulte Configurando a pilha de middleware na documentação do Rails.
Ativar cache de query para tarefa ativa
O driver Ruby fornece Query Cache Middleware para Active Job. Você pode habilitá-lo para todos os trabalhos em um inicializador, conforme mostrado no código a seguir:
# Enable Mongo driver query cache for Active Job ActiveSupport.on_load(:active_job) do include Mongo::QueryCache::Middleware::ActiveJob end
Você também pode habilitá-lo para uma classe de tarefa específica, como mostrado no seguinte código:
class MyJob < ActiveJob::Base include Mongo::QueryCache::Middleware::ActiveJob end
Manual
Para ativar o cache de query manualmente para um segmento de código específico, você pode executar seu código no seguinte bloco:
Mongo::QueryCache.cache do # Include code here ... end
Você pode habilitar e desabilitar explicitamente o cache de query, mas recomendamos usar o formulário de bloqueio no exemplo de código anterior. O seguinte código demonstra como habilitar e desabilitar o cache de query:
begin Mongo::QueryCache.enabled = true # Include code here ensure Mongo::QueryCache.enabled = false end
Armazene em cache o resultado do primeiro método
A chamada do método first em uma classe de modelo usa uma classificação crescente no campo _id ao retornar o resultado. Isso pode produzir um comportamento inesperado se você habilitar o cache de query.
Por exemplo, se você chamar o método all em uma classe de modelo antes de chamar first, poderá esperar que o método first use os resultados em cache de all. No entanto, como o Mongoid aplica uma classificação à segunda chamada, ambos os métodos executam query do banco de dados e armazenam separadamente os resultados em cache.
Para usar os resultados armazenados em cache ao chamar o método first, chame all.to_a.first na classe de modelo, conforme mostrado no código de exemplo a seguir:
Band.all.to_a.first
No exemplo anterior, encadear o método to_a executa a query e converte os resultados em uma array na memória. Em seguida, o método first simplesmente retorna a primeira entrada da array em vez de disparar outra query e armazenar os resultados em cache.
Informações adicionais
Para saber mais sobre como criar critérios de filtro, consulte o guia Especificar uma query de documento.
Para saber como personalizar seu destino de persistência, consulte o guia Configuração de persistência .