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!
Читайте также:
- Почему NestJS — лучший фреймворк Node.js для микросервисов
- Redis и Memurai для кэширования SQL-запросов
- Мониторинг сайта: просто, но эффективно
Читайте нас в Telegram, VK и Дзен
Перевод статьи Rémy Villulles: Caching with Redis and Node.js