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.