Menu Docs

Cache de consulta

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 .

Para saber mais sobre esse recurso, consulte Cache de Query na documentação do driver Ruby.

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.

O driver Ruby fornece middleware para ativar automaticamente o cache de query para solicitações web do Rack e execuções de tarefa do Active Job. Para visualizar instruções sobre como ativar automaticamente o cache de query, consulte a seção Habilitar cache de query para solicitações web de Rack do guia Configuração do middleware do cache de query.

Observação

O middleware de cache de query não se aplica ao código executado fora de solicitações ou trabalhos da web.

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

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.

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 .