Как добавить клиент Redis для кеширования в преобразователе GraphQL - PullRequest
0 голосов
/ 27 мая 2020

Есть идеи, как мы можем написать преобразователь graphQL, чтобы я мог кэшировать ответ API в redis, и при следующем вызове он берет данные из 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 Ответ

0 голосов
/ 28 мая 2020

Я думаю, вам может понадобиться что-то вроде Источники данных Apollo , если вы получаете данные из других REST API. У них есть раздел специально об использовании Redis / memcached в качестве кеша вместо кеша в памяти.

Итак, суть этого ответа в том, что если вы используете Apollo Server и хотите кэшировать ответы от REST API, вы можете использовать источники данных с apollo-server-cache-redis

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...