es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No puedo hacer que la caché de Redis funcione con Apollo Server Express.

Estoy tratando de configurar un sistema de caché para mi servidor Apollo Express, pero parece que las guías que he seguido en los documentos oficiales en https://www.apollographql.com/docs/apollo-server/performance/caching/#memcachedredis-setup no funcionan para mí.

Puedo verificar que en mi resolutor para una consulta, se sigue recibiendo información a través de la consola que indica que se sigue accediendo cada vez en lugar de solo acceder una vez y establecer en caché.

// Definición de mi resolutor
const getUserProfile = async (_, args, context, info) => {
info.cacheControl.setCacheHint({ maxAge: 300 });
console.log(‘MISS, set cache hint’) // esta consola se registra cada vez en lugar de solo una vez
return context;
};

Aquí está mi código:
server.js

const redisClient = require(‘./cacheClient’);

let httpServer;
if (process.env.ENV === ‘prod’) {
httpServer = httpCreateServer(app);
} else {
httpServer = httpsCreateServer(
{
key: fs.readFileSync(‘./localhost-key.pem’),
cert: fs.readFileSync(‘./localhost.pem’),
},
app
);
}

const apolloServer = new ApolloServer({
typeDefs,
resolvers,
cache: new BaseRedisCache({
client: redisClient
}),
cacheControl: true,
});

apolloServer.context = ({ req }) => ({

});

await apolloServer.start();

apolloServer.applyMiddleware({ app });

httpServer.listen(PORT, () =>
console.log(“El servidor está funcionando en el puerto ${PORT}”)
);

cacheClient.js
require(‘dotenv’).config();

const { REDISSERVER, REDISPORT } = process.env;

const redis = require(‘redis’);

const client = redis.createClient({
host: REDISSERVER,
port: REDISPORT,
});

client.on(‘connect’, () => {
console.log(‘Cliente Redis conectado’);
});

client.on(‘message’, (channel, message) => {
console.log(Recibido ${message} desde ${channel});
});

module.exports = client;

También me aseguro de que mi aplicación web envíe el encabezado Cache-Control: max-age=300 en la consulta de GraphQL. También revisé mi servidor Redis y verifiqué que no se agregan nuevas claves después de hacer la consulta de GraphQL.

También intenté establecer la directiva cacheControl en el tipo como:

type UserProfile @cacheControl(maxAge: 300) {

}

pero sin éxito. Aprecio cualquier ayuda, ¡gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que ya has hecho mucho solucionando problemas, por lo que es probable que haya algo más sucediendo.

    Sería útil ver el código de la aplicación web que está haciendo la consulta de GraphQL, así como el código para la propia consulta de GraphQL. Además, sería útil saber qué versión de Apollo Server estás utilizando.

    Si aún tienes problemas, es posible que desees considerar publicar tu pregunta en Stack Overflow, ya que hay muchos usuarios experimentados de Apollo Server que pueden ayudarte.

Comments are closed.