如何在 GraphQL 解析器中添加用于缓存的 redis 客户端
Posted
技术标签:
【中文标题】如何在 GraphQL 解析器中添加用于缓存的 redis 客户端【英文标题】:How to add redis client for caching in GraphQL resolver 【发布时间】:2020-09-14 04:44:57 【问题描述】:知道如何编写 graphQL 解析器,以便我可以在 redis 中缓存 API 响应,并在下一次调用时从 redis 获取数据而不是访问后端 API 响应?
这里的用户名在 API 中是唯一的。即 1. getify 和 2. bradtraversy
/// Middleware Function to Check Cache
checkCache = (username) =>
redis.get(username, (err, data) =>
if (err)
console.log("====111111111111==========");
console.log(err);
if (data !== null)
personInfo = data;
// console.log(data);
console.log("============222222222222=========");
return personInfo;
);
;
// Running Code
const resolvers =
Query:
getPerson: async (_, username ) =>
await checkCache(username);
console.log(username);
if(null != personInfo)
console.log("=======333333333=======")
console.log(personInfo);
return JSON.parse(personInfo);
else
console.log("Fetching Data from API")
console.log(username);
const response = await fetch(`https://api.github.com/users/$username`).then(response => response.json());
redis.SETEX(username, 300, JSON.stringify(response));
// console.log(response);
return response;
【问题讨论】:
【参考方案1】:我认为您可能想要Apollo's Data Sources 之类的东西,假设您从其他 REST API 获取数据。他们有a section specifically about using Redis/memcached as a cache 而不是内存中的。
所以这个答案的要点是,如果您使用 Apollo Server 并希望缓存来自 REST API 的响应,您可以使用带有 apollo-server-cache-redis 的数据源
【讨论】:
感谢您的回复,我正在使用 graphQL 并根据用户的 Key 缓存 API。 getPerson(username: "getify") login id name node_id avatar_url email url follower_url public_gists 有人可以帮我吗?以上是关于如何在 GraphQL 解析器中添加用于缓存的 redis 客户端的主要内容,如果未能解决你的问题,请参考以下文章
从 Rest(Express) 迁移到 GraphQL:模型(mongoose) 在 graphQL 解析器中不起作用
如何知道 Sangria GraphQL 中对象解析器中的请求字段
在 graphql 解析器中从 mySQL 查询现有的链接表?