apollo-server - 如何使用 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 但用于部分查询缓存而不是缓存完整查询?
解决方案
推荐阅读
- django - 如何添加用户可以编辑的自动字段
- paypal - 通过卖家提供的不同退款金额解决争议的 PayPal IPN
- reactjs - 在react-native中重新加载时如何修复连接错误?
- python - Errno 13 权限被拒绝:| 使用 ShellExecute 创建网络拦截器
- web-services - WebService InvocationTargetException
- css - 在 ReactJS 的可折叠项中添加不同的 css?
- java - 基于矩阵位置的Gridview项集[行][列]
- angular - 在使用 ngx-datatable 且旋钮不工作的组件的 Storybook 故事之间切换时出现 ViewDestroyedError
- ios - 更改集合内的 tableview 标题高度
- sql - 将多行转换为一 - SQL