Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

251
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!