Redis для кэширования в Node.js
Redis - это хранилище структур данных в памяти, используемое в качестве распределенной базы данных ключ-значение в памяти, кэша и посредника сообщений. Его можно использовать в качестве распределенного кэша для ускорения работы приложений. Кэширование - это метод, используемый для хранения регулярно используемых данных в пространстве.
Redis занимает меньше времени при обслуживании повторяющихся запросов, чем при каждом обращении к базе данных.
Node. js это кроссплатформенная среда выполнения JavaScript с открытым исходным кодом, используемая для создания масштабируемых веб-приложений. Node. js приложения в основном привязаны к вводу-выводу, поскольку большую часть времени они имеют дело с операциями ввода-вывода. Кэширование может значительно повысить производительность Node. js приложений, при условии их эффективного использования.
Мы построим простое Node. js приложение и покажем, как использовать Redis для кэширования данных электронного приложения, повышая его производительность.
Создание образца Node. js
Чтобы продемонстрировать, как использовать Redis в качестве кэша для Node. js приложения, мы создадим простой Node. js приложение, которое считывает данные из базы данных PostgreSQL. Давайте создадим Node. js проект с именем redis-cache, используя приведенную ниже команду:
mkdir redis-cache && cd redis-cache
Запустите команду npm init, чтобы сгенерировать файл конфигурации по умолчанию package. json и установить модули express и pg, выполнив следующую команду:
npm install express pg --save
Создайте файл server. js в корневом каталоге проекта и введите следующий код:
const express = require("express");
const { Client } = require("pg");
const PORT = 3000;
const HOST = "127.0.0.1";
const connection = {
user: process.env.POSTGRESQL_USER,
password: process.env.POSTGRESQL_PASSWORD
};
const client = new Client(connection);
client.connect();
let getAllUsers = async () => {
try {
let res = await client.query("SELECT * FROM users");
return res.rows
} catch (e) {
throw new Error(e);
}
};
const app = express();
app.get("/users", async (req, res) => {
let users = await getAllUsers();
console.log(users);
res.send(users);
});
app.listen(PORT, HOST);
console.log(`Server running on ${HOST}:${PORT}`);
Приведенный выше код создает экспресс-сервер, который извлекает данные из таблицы users и отправляет их в качестве ответа. Следуйте приведенным здесь инструкциям, чтобы создать таблицу users и добавить несколько примеров записей.
Теперь запустите Node. js обработайте и запустите пример приложения, выполнив приведенную ниже команду:
node server.js
Настройка и запуск сервера Redis
Как только у вас будет Node. js приложение готово, вы можете настроить и запустить сервер Redis. Следуйте инструкциям в соответствии с вашей операционной системой на странице загрузки Redis, чтобы установить и запустить сервер Redis.
Подключение Node. js Приложение к серверу Redis
Как только сервер Redis будет запущен, вы сможете подключить Node. js приложение к серверу Redis. Node. js предоставляет различные модули для управления базами данных Redis. В этом руководстве мы будем использовать node-redis. Чтобы установить модуль, запустите приведенную ниже команду в корневом каталоге проекта:
npm install redis --save
Как только модуль будет установлен, укажите его в верхней части server. js сохраните файл и предоставьте информацию о подключении к серверу Redis.
const redis = require("redis");
const redisPort = 6379;
const redisHost = "127.0.0.1";
const redisClient = redis.createClient({
port: redisPort,
host: redisHost
});
Использование Redis в качестве кэша для Node. js
Теперь, когда сервер Redis настроен и Node. js приложение подключено к нему, мы будем использовать Redis в качестве кэша для приложения. Мы установим пару ключ/ значение в Redis с ответом из приложения и добавим слой кэша в приложение, чтобы проверить, существуют ли данные в хранилище Redis. Если данные найдены в кэше Redis, они будут отправлены в качестве ответа, в противном случае приложение извлечет данные из базы данных PostgreSQL.
Прежде чем мы добавим уровень кэша в приложение, мы добавим код для хранения данных на сервере Redis после того, как они будут извлечены из базы данных PostgreSQL. Измените функцию getAllUsers() следующим образом:
let getAllUsers = async () => {
try {
let res = await client.query("SELECT * FROM users");
let users = res.rows;
redisClient.set(
"users",
JSON.stringify(users)
);
return users;
} catch (e) {
throw new Error(e);
}
};
Он сохраняет ответ из базы данных PostgreSQL в виде строки JSON для ключевых пользователей.
Давайте добавим слой кэша к маршруту /users. Определите функцию checkCache(), которая будет проверять, присутствуют ли данные в хранилище Redis.
let checkCache = (req, res, next) => {
redisClient.get("users", (err, data) => {
if (err) {
return next(err);
}
if (data !== null) {
res.send(JSON.parse(data));
} else {
next();
}
});
};
Он извлекает значение, сохраненное для ключевых пользователей, и отправляет его в качестве ответа. Если он не найдет данные в хранилище Redis, он вызовет функцию next().
Вызовите функцию checkCache() перед фактическим маршрутом /users.
app.get("/users", checkCache, async (req, res) => {
let users = await getAllUsers();
console.log(users);
res.send(users);
});
Теперь запустите приложение и получите доступ к конечной точке, чтобы протестировать уровень кэша.
node server.js
Если данные присутствуют в хранилище Redis, приложение вернет данные из хранилища Redis. В противном случае он будет извлекать данные из базы данных PostgreSQL.
Теперь, когда у нас есть Redis в качестве кэша для нашего Node. js приложение, наше приложение выиграет от повышения производительности, обеспечиваемого сервером Redis.
Вывод
Redis — это мощное и масштабируемое решение для кэширования данных, используемых приложениями Node.js. Его легко настроить и интегрировать с приложением Node.js, и он повышает производительность приложений. В этом руководстве мы рассмотрели, как использовать Redis в качестве кэша для приложений Node.js.