Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

259
Visualizações
¿Cómo puedo "almacenar en caché" un resultado de mongoDB/Mongoose para usarlo en mis vistas y rutas de Express.js?

Lo que estoy tratando de lograr es algún tipo de forma de almacenar en caché los resultados de una consulta mongoDB/Mongoose que puedo usar en mis vistas y rutas. Necesitaría poder actualizar este caché cada vez que se agregue un nuevo documento a la colección. No estoy seguro de si esto es posible y si es así, cómo hacerlo, debido a que las funciones son asíncronas.

Esto es lo que tengo actualmente para almacenar las galerías, sin embargo, esto se ejecuta con cada solicitud.

 app.use(function(req, res, next) { Gallery.find(function(err, galleries) { if (err) throw err; res.locals.navGalleries = galleries; next(); }); });

Esto se usa para obtener los nombres de las galerías, que luego se muestran en la barra de navegación desde una galería generada dinámicamente. El modelo de la galería se configura con solo un nombre de la galería y un slug

y esto es parte de mi vista EJS dentro de mi navegación que almacena los valores en un menú desplegable.

 <% navGalleries.forEach(function(gallery) { %> <li> <a href='/media/<%= gallery.slug %>'><%= gallery.name %></a> </li> <% }) %>

Se espera que el sitio web en el que estoy trabajando obtenga cientos de miles de usuarios simultáneos, por lo que no quiero tener que consultar la base de datos para cada solicitud si no es necesario, y simplemente actualizarla cada vez que se crea una nueva galería.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Echa un vistazo a cachegoose . Le permitirá almacenar en caché cualquier consulta que desee e invalidar esa entrada de caché cada vez que se cree una nueva galería.

Necesitarás algo como esto:

 const mongoose = require('mongoose'); const cachegoose = require('cachegoose'); cachegoose(mongoose); // You can specify some options here to use Redis instead of in-memory cache app.get(function(req, res, next) { ... Gallery .find() .cache(0, 'GALLERY-CACHE-KEY') .exec(function(err, galleries) { if (err) throw err; res.locals.navGalleries = galleries; next(); }); ... }); app.post(function(req, res, next) { ... new Gallery(req.body).save(function (err) { if (err) throw err; // Invalidate the cache as new data has been added: cachegoose.clearCache('GALLERY-CACHE-KEY'); }); ... });

Aunque podría hacer algo más simple almacenando en caché los resultados manualmente en una variable e invalidando ese caché cuando se agregan nuevas galerías, le aconsejo que eche un vistazo a ese paquete en su lugar.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda