Кэширование с помощью Redis и Node.js

Redis предлагает идеальный способ временного хранения данных, позволяющий избежать необходимости повторного выполнения дорогостоящих операций и запросов.

Redis работает по системе “ключ-значение”, что позволяет восстанавливать результаты на основе заданного ключа. Каждый ключ должен быть уникальным и иметь тип string.

Все введенные в Redis данные имеют TTL (время жизни), определенное в секундах. Когда TTL становится равным 0, данные полностью удаляются и оказываются недоступными.

В этой статье будет использован открытый API agify.io для предсказания возраста человека на основе его имени. В данном случае это отличный пример, так как ключом будет имя, а значением  —  результат!

Настройка среды

Прежде чем приступить к работе, настроим все необходимое. Начнем с Redis!

Настройка Redis отлична для каждой операционной системы. В данной статье не будет объяснения, как запустить Redis. Чтобы узнать, как это сделать, изучите документацию.

Как только настройка Redis будет завершена, сразу же переходите к настройке среды NodeJS.

В новой папке выполните npm init -y, а затем npm install -S axios redis.

Axios будет использоваться для вызовов API, поскольку эта библиотека проста в применении.

Redis  —  библиотека, которая нам понадобится для доступа к серверу Redis и взаимодействия с ним.

Подключение к серверу Redis

Прежде всего, подключимся к экземпляру Redis. По умолчанию Redis будет работать на порту 6379 и на хосте localhost. Это также значения по умолчанию, используемые пакетом Redis.

В JS-файле начнем с инициализации клиента и подключения к нему:

Если все сделано правильно на стороне Redis, после запуска этого кода вы увидите connected (подсоединено) в консоли.

Получение данных из API

Прежде чем углубиться в работу с Redis, быстро создадим функцию для получения данных из API.

URL будет иметь следующий вид: https://api.agify.io/?name={name}.

Не забудьте запросить axios, чтобы иметь возможность использовать эту библиотеку!

Сохранение результата в Redis во избежание повторной выборки

Теперь, имея доступ к данным, нужно убедиться в том, что мы будем получить их только один раз. После этого необходимо сохранить данные в Redis, чтобы избежать повторного вызова API для одного и того же имени.

Сначала проверим, существует ли значение в Redis. Для этого создадим следующую функцию:

Эта функция позволит получить результат, а также узнать, существует ли значение.

Создадим еще одну функцию, которая позволит сохранить только что полученное значение прямо в Redis:

Теперь, когда у нас есть все необходимое, используем все вместе:

При первом выполнении этого кода у вас должно отобразиться найденное значение. Однако, если вы выполните код повторно, то увидите, что значение кэшировано!

Установка TTL

Теперь, когда появилась возможность сохранять данные в Redis, нужно установить TTL на случай, если результат API изменится в будущем. Этот момент нельзя пропустить!

Для этого немного отредактируем функцию сохранения:

Эта новая функция позволяет установить время истечения срока действия для входных данных. Он истечет через 10 000 секунд.

Доступ к входным данным через командную строку

Вам может понадобиться доступ к входным данным через командную строку, чтобы проверить, все ли в порядке. Для этого можете использовать следующие команды:

  • GET <key>;
  • TTL <key>.

Первая команда вернет значение, а вторая  —  время, оставшееся до истечения срока действия!


Вот так просто можно настроить NodeJS для соединения с Redis!

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Rémy Villulles: Caching with Redis and Node.js

Предыдущая статья10 простых сниппетов Python для веб-разработки, автоматизации и обработки данных
Следующая статьяНастраиваем автоматизированную модерацию с помощью OpenAI