首页 > 解决方案 > 如何使用 apollo-server(gRPC,而不是 REST)实现部分查询缓存

问题描述

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

标签: apollo-server

解决方案


推荐阅读