如何添加Redis客户端以在GraphQL解析器中进行缓存

问题描述 投票:0回答:1

任何想法我们如何编写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;
      }
    }
    }

    
caching graphql amazon-elasticache node-redis
1个回答
0
投票

我想您可能想要类似Apollo's Data Sources的东西,假设您要从其他REST API获取数据。他们有a section specifically about using Redis/memcached as a cache,而不是内存中的。

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

© www.soinside.com 2019 - 2024. All rights reserved.