我尝试使用apollo-server v2设置完整的GraphQL查询响应缓存,只是发现它在减少网络请求方面做得不够好。
我认为我需要的是部分查询缓存。
考虑以下架构:
type Post @cacheControl(maxAge: 240) {
id: Int!
title: String
comments: [Comment]
}
type Comment @cacheControl(maxAge: 50) {
id: Int!
title: String
text: String
}
在查询{ post(id: "1") { id, title, comments } }
时,如果过去了不到240秒,我不想重新获取帖子。使用完整的GraphQL查询响应,整个查询将基于最低的maxAge重新获取。
这是我希望部分查询缓存可以解救的地方。
不幸的是,它在https://www.apollographql.com/docs/resources/faq/#what-kinds-of-cache-should-i-set-up中指出,部分查询缓存只能通过redis / memcached来实现,并且仅在使用数据源时才能实现。
由于我的服务是gRPC服务而不是REST,所以我不能使用数据源-理想情况下,我希望没有数据源也是可以的。
因此,如果可能的话,如何在没有数据源的情况下使用Apollo Server v2实现部分查询缓存。如果不可能,那么如何使用部分查询缓存实现gRPC数据源?
是否可以通过某种方式修改此内容:https://github.com/apollographql/apollo-server/blob/master/packages/apollo-server-plugin-response-cache/src/ApolloServerPluginResponseCache.ts,以便仍可以使用@cacheControl进行控制,但仅用于部分查询缓存而不是缓存完整查询?