gpt4 book ai didi

caching - Apollo 服务器端缓存 : What is cache keyed on?

转载 作者:行者123 更新时间:2023-12-05 03:26:52 27 4
gpt4 key购买 nike

我正在阅读 documentation for Apollo server-side caching ,但看不到任何关于缓存通常如何加密的内容。

我需要的是一个以响应中包含的对象 ID 为键的缓存,而不是以您从查询中获得的内容为键的缓存。

例如,假设下面的 Person 对象由 ID 字段唯一标识,而 hasShortHair 字段的计算成本很高,但很少更改。

type Person {
id: String!
hasShortHair: Boolean!
}

假设有 2 种不同的查询类型可以返回一个 Person:

getPerson(id: String!): Person!
getAllPeople: [Person!]!

理想情况下,对于具有给定 ID 的人,如果最近通过 getPerson 或 getAllPeople 获取了该人,那么我想缓存为该人计算的 hasShortHair 值,并将该缓存用于 < em>both getPerson 和 getAllPeople 查询返回那个人。

像下面这样设置可以实现吗? ( Based on the book example in the documentation )

type Person @key(fields: "id") @cacheControl(maxAge: 30) {
id: String!
hasShortHair: Boolean!
}

或者这个缓存是否仍然按请求键控?

最佳答案

ApolloServerPluginCacheControl 插件解析特定字段和类型的缓存注释(例如通过 @cacheControl 指令),并基于此确定特定的整体缓存策略请求。

根据为请求计算的缓存策略,然后在响应对象上设置一个 Cache-Control header 。

您可以自己查看代码on Github

仅此而已,不涉及缓存键。

然后由客户端或 Apollo 前面的某个缓存代理负责使用 Cache-Control header 进行实际缓存。

header 具有以下格式:

Cache-Control: max-age=60, private

根据解释所有 cacheControl 提示的规则确定 max-age

如果你想用 Apollo 缓存响应,你可以使用 response-cache-plugin .

更多信息在这里: https://www.apollographql.com/docs/apollo-server/performance/caching/#caching-with-responsecacheplugin-advanced

使用 response-cache 插件,您可以将整个响应缓存在 Redis 或 memcached 中。

在这种情况下,缓存键基于请求本身,即来自插件文档:缓存的响应仅用于相同的请求

所以,回答你的问题:

Ideally, for a person with a given ID, if that person has been fetched via > either getPerson or getAllPeople recently, then I'd like to cache thevalue of hasShortHair that was calculated for that person, and use thatcache for both getPerson and getAllPeople queries which return that person.

缓存是每个请求/响应,而不是每个单独解析的字段。

来自ApolloServerPluginResponseCache code :

所有写入都将在以“fqc:”开头的 key 下进行,然后是 JSON 对象的固定大小的加密散列,其中的 key 代表查询文档、操作名称、变量和从中派生的其他 key sessionId 和 extraCacheKeyData Hook 。

因此,如果您想缓存单个字段,则必须添加自己的缓存机制才能做到这一点。

关于caching - Apollo 服务器端缓存 : What is cache keyed on?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71623906/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com