Автор оригинала: 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§ion=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-отклика – время Поля на двух изображениях ниже.
Первый запрос
Второй запрос: вот заголовок ответа для второго запроса
Первый запрос взял 2739 миллисекунд в то время как второй только взял 6 миллисекунд разница 2733 миллисекунды!
Смущенный? Вот поток ответа-ответа, чтобы помочь вам понять, что происходит в /API/Поиск Русский оператор:
- Пользовательские запросы на статью
- Мы смотрим в магазин Redis, чтобы увидеть статей, которые были кэшированы ранее
- Если это правда, мы обслуживаем кэшированную версию клиенту.
- В противном случае мы принесем статью из API Wikipedia
- Мы кэшируем ответ от API в Redis в течение часа (3600 секунд)
- Мы отправляем ответ на пользователя.
Больше информации? Если у вас есть вопросы, пожалуйста, оставьте комментарий. Не забудьте поделиться статьей, если вы обнаружите это информативным.