Автор оригинала: 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 секунд)
- Мы отправляем ответ на пользователя.
Больше информации? Если у вас есть вопросы, пожалуйста, оставьте комментарий. Не забудьте поделиться статьей, если вы обнаружите это информативным.