如何在 GraphQL 解析器中添加用于缓存的 redis 客户端



知道我们如何编写 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;
}
}
}

我认为你可能想要类似Apollo的数据源的东西,假设你从其他REST API获取数据。他们有一个部分专门关于使用 Redis/memcached 作为缓存而不是内存中的缓存。

所以这个答案的要点是,如果你使用的是Apollo Server并希望缓存来自REST API的响应,你可以将数据源与apollo-server-cache-redis一起使用

相关内容

  • 没有找到相关文章

最新更新