Рубрики
Без рубрики

Кэширование с Redis: Node.js Пример

Здание более быстрых приложений Node.js с использованием Redis.

Автор оригинала: Olawale Akinseye.

Эта статья является вторым в моем вступлении в серии Redis и кэширования. Если вы понятия не имеете, что Кэширование Есть или что Redis Есть, пожалуйста, прочитайте мой Введение в кэширование и редис пост, прежде чем продолжить.

Теперь, когда у вас есть понимание того, что такое кеширование и Redis, давайте построим очень базовый проект, который реализует кэширование с помощью Redis. Я полагаю, что понимание новичка на уровне Node.js с Express.

Информация о проекте Мы назовем этот проект Википедия Артикул Getter И это позволит пользователям запросить API Wikipedia с нашей конечной точки.

Пререквизит Убедитесь, что у вас есть Node.js Установлен на вашем компьютере, затем откройте свой терминал (Mac OS) или командную строку (пользователи Windows).

Установите Redis на вашу машину Если вы пользователь OSX, вы можете установить с помощью команды ниже. Для других платформ, пожалуйста, следуйте руководству по https://redis.io/download Отказ

brew install redis

Создать новый каталог

mkdir redis-cache

Перейдите к новому каталогу

cd redis-cache

Создайте файл package.json

npm init --force

- Форс Рассказывает NPM использовать параметры по умолчанию при создании Package.json, чтобы вы не задавали никаких вопросов.

После запуска команды выше вы должны иметь файл Package.json в Redis-Cache каталог.

Создать файл server.js в каталоге.

Создать файл Server.js Каталог должен выглядеть так с двумя файлами в нем;

Redis-Cache [Directory] – Server.js [Файл] – Package.json [Файл]

Мы будем использовать следующие пакеты NPM в этом проекте: Axios сделать HTTP-запросы. Экспресс для маршрутизации. Redis как Node.js redis Client. Время отклика Чтобы записать время отклика в заголовке ответа.

Установите модули

npm install --save axios express redis response-time

Redis установлен? Обновить код проекта Теперь, когда у вас установлен Redis, добавьте следующий код на server.js файл.

// Import the installed modules.
const express = require('express');
const responseTime = require('response-time')
const axios = require('axios');
const redis = require('redis');

const app = express();

// create and connect redis client to local instance.
const client = redis.createClient();

// Print redis errors to the console
client.on('error', (err) => {
  console.log("Error " + err);
});

// use response-time as a middleware
app.use(responseTime());


// create an api/search route
app.get('/api/search', (req, res) => {
  // Extract the query from url and trim trailing spaces
  const query = (req.query.query).trim();
  // Build the Wikipedia API url
  const searchUrl = `https://en.wikipedia.org/w/api.php?action=parse&format=json&section=0&page=${query}`;

  // Try fetching the result from Redis first in case we have it cached
  return client.get(`wikipedia:${query}`, (err, result) => {
    // If that key exist in Redis store
    if (result) {
      const resultJSON = JSON.parse(result);
      return res.status(200).json(resultJSON);
    } else { // Key does not exist in Redis store
      // Fetch directly from Wikipedia API
      return axios.get(searchUrl)
        .then(response => {
          const responseJSON = response.data;
          // Save the Wikipedia API response in Redis store
          client.setex(`wikipedia:${query}`, 3600, JSON.stringify({ source: 'Redis Cache', ...responseJSON, }));
          // Send JSON response to client
          return res.status(200).json({ source: 'Wikipedia API', ...responseJSON, });
        })
        .catch(err => {
          return res.json(err);
        });
    }
  });
});

app.listen(3000, () => {
  console.log('Server listening on port: ', 3000);
});

Запустите приложение

node app.js

Укажите свой браузер на localhost: 3000/API/Поиск? Запрос = Нигерия Отказ Вы можете заменить Нигерия с любым словом по вашему выбору.

Проверка производительности/скорости Открыть инструменты разработчика Chrome> Network>

Примите к сведению X-отклика – время Поля на двух изображениях ниже.

Первый запрос

Снятый экран 2018-03-04 в 08.24.47.PNG

Второй запрос: вот заголовок ответа для второго запроса

Снятый экран 2018-03-04 в 08.25.05.PNG

Первый запрос взял 2739 миллисекунд в то время как второй только взял 6 миллисекунд разница 2733 миллисекунды!

Смущенный? Вот поток ответа-ответа, чтобы помочь вам понять, что происходит в /API/Поиск Русский оператор:

  1. Пользовательские запросы на статью
  2. Мы смотрим в магазин Redis, чтобы увидеть статей, которые были кэшированы ранее
    • Если это правда, мы обслуживаем кэшированную версию клиенту.
    • В противном случае мы принесем статью из API Wikipedia
      • Мы кэшируем ответ от API в Redis в течение часа (3600 секунд)
      • Мы отправляем ответ на пользователя.

Больше информации? Если у вас есть вопросы, пожалуйста, оставьте комментарий. Не забудьте поделиться статьей, если вы обнаружите это информативным.