如何使用Apollo服务器(gRPC,而不是REST)实现部分查询缓存

时间:2019-09-24 14:07:30

标签: apollo-server

我尝试使用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进行控制,但仅用于部分查询缓存而不是缓存完整查询?

0 个答案:

没有答案