【问题标题】:How to add redis client for caching in GraphQL resolver如何在 GraphQL 解析器中添加用于缓存的 redis 客户端
【发布时间】: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;
      }
    }
    }

    

【问题讨论】:

    标签: javascript node.js caching graphql amazon-elasticache


    【解决方案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 } }
    • 有人可以帮我吗?
    猜你喜欢
    • 2020-07-22
    • 2020-08-30
    • 2020-12-01
    • 2016-12-17
    • 2021-05-04
    • 2015-02-03
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    相关资源
    最近更新 更多