Add data cache on the resolver level
pkarw opened this issue · 1 comments
pkarw commented
What is the motivation for adding/enhancing this feature?
At the moment, the SSR caching is supposed to work with the REST catalog endpoint only
The same output cache - including tagging - should be added on resolvers level
What are the acceptance criteria
- SSR cache added to graphQL resolvers for key entities: product, category
ovidiul commented
Apollo Graphql Server has a caching mechanism that can be implemented with a cache server like Redis https://www.apollographql.com/docs/apollo-server/performance/caching/ , would this be a possible solution for this issue, from my tests, it could be implemented with minimal changes across all queries.
The config with redis would look something like this, by modifying the ApolloServer setup in the src/index.ts file:
import responseCachePlugin from 'apollo-server-plugin-response-cache';
const { RedisCache } = require('apollo-server-cache-redis');
if (config.get('server.useOutputCache')) {
useQueryCache = {
cache: new RedisCache(`//${config.get('redis.host')}:${config.get('redis.port')}`),
cacheControl: {
defaultMaxAge: config.get('server.outputCacheDefaultTtl')
},
plugins: [responseCachePlugin()]
}
}
if (aggregatedGraphqlConfig.hasGraphqlSupport) {
const server = new ApolloServer({
typeDefs: mergeTypes(aggregatedGraphqlConfig.schema, { all: true }),
resolvers: aggregatedGraphqlConfig.resolvers,
rootValue: global,
playground: true,
...useQueryCache,
context: integrationContext => integrationContext
});
server.applyMiddleware({ app, path: '/graphql' });
} else {
console.info(
'No GraphQL Support enabled. Please provide at least one module supporting graphQL schema.'
);
}