const { RedisCache } = require('apollo-server-cache-redis');
const server = new ApolloServer({
typeDefs,
resolvers,
cache: new RedisCache({
host: 'redis-server',
// Options are passed through to the Redis client
}),
dataSources: () => ({
moviesAPI: new MoviesAPI(),
}),
});
我想知道如何cache
使用该密钥,考虑到缓存似乎实际上是自定义实现的MoviesAPI()
,然后通过context.dataSources.moviesAPI.someFunc()
. 例如,假设我想为 SQL 数据库实现自己的缓存。它看起来像
cache: new RedisCache({
host: 'redis-server',
}),
dataSources: () => ({
SQL: new SQLCache(),
}),
});
whereSQLCache
有我自己的连接到RedisCache
类似的功能:
getCached(id, query, ttl) {
const cacheKey = `sqlcache:${id}`;
return redisCache.get(cacheKey).then(entry => {
if (entry) {
console.log('CACHE HIT!');
return Promise.resolve(JSON.parse(entry));
}
console.log('CACHE MISS!');
return query.then(rows => {
if (rows) redisCache.set(cacheKey, JSON.stringify(rows), ttl);
return Promise.resolve(rows);
});
});
}
所以这意味着我拥有RedisCache
关键ApolloServer
cache
和dataSource
实施。显然,RedisCache
在实现中使用了dataSource
,但是那个ApolloServer
cache
键到底是做什么的呢?
同样在客户端,示例大多显示使用InMemoryCache
而不是 Redis 缓存。客户端 Apollo 缓存应该是与服务器缓存不同的缓存,还是应该RedisCache
在两个地方都使用相同的缓存?