Кратко ръководство за използване на Redis с Nodejs API за кеширане

Redis е хранилище на структура от данни в паметта, използвано като разпределена база данни с ключ-стойност в паметта, кеш и брокер на съобщения, с опционална издръжливост. Redis поддържа различни видове абстрактни структури от данни, като низове, списъци, карти, набори, сортирани набори, HyperLogLogs, растерни изображения, потоци и пространствени индекси.

Предпоставки:

  1. Експрес
  2. Redis
  3. Аксиос
  4. NewsAPI (https://newsapi.org/)

Първо трябва да настроим REST API с помощта на express и да стартираме сървъра.

import express from 'express';

const app = express();

app.use( express.json());
app.use( express.urlencoded({extended: true}));


app.get('/search/:q', (req, res) => {
    res.status(200).send({msg: 'connected!'});
})


const PORT = 3000;
app.listen(PORT, ()=> {
    console.log(`Listening on ${PORT}`);
});

Сървърът е готов и работи, следващата стъпка е да добавим NewsAPI в нашето приложение. ще ни трябва API ключ за достъп до крайните точки на NewsAPI. трябва да се регистрирате на https://newsapi.org/ и да получите своя API ключ. ще напишем функция, която ще отведе дума за търсене/ключова дума до крайната точка „всичко“.

GET https://newsapi.org/v2/everything?q=<searchTerm>&apiKey=<API_KEY>
const apiKey = process.env.API_KEY;
const fetchNewsBySearch = async (searchTerm) => {
    const url = `https://newsapi.org/v2/everything?q=${searchTerm}&apiKey=${apiKey}`;
    const results = await axios.get(url);
    return results;
}

app.get('/search/:q', async (req, res) => {
    const {q} = req.params;

    try {
        let results;
        const {data} = await fetchNewsBySearch(q);
        results = data?.articles; /// Get articles

        if(results.length === 0) throw 'No news result\'s were found.';

         res.status(200).send({
                data: results
         });
    } catch (error) {
        console.error();
        res.status(404).send({msg: 'No news result\'s were found.'});
    }
})

Нека да проверим резултатите, когато стартираме това в пощальона.

GET https://newsapi.org/v2/everything?q=Technology&apiKey=<API_KEY>

Екранна снимка.

Можем драстично да намалим това време, като запазим резултатите в нашия Redis кеш и извлечем резултатите от кеша, вместо да правим друга HTTP GET заявка към NewsAPI сървъра. За да направим това, трябва да настроим redis на сървъра, ето връзка към кратко ръководство за настройка на redis на вашата машина https://redis.io/topics/quickstart

Ние дефинираме самоизвикваща се анонимна функция, която инициира връзка с нашия redis сървър. по подразбиране Redis използва порт 6379.

let redisClient;
(async() => {
    redisClient = redis.createClient();  //create a redisclient instance
    redisClient.on('error', (error)=> console.log(`Redis Error: ${error}`));
    await redisClient.connect() //connect to redis server
})();

Ние ще преработим нашата крайна точка „/search“, за да запазим резултатите след направена заявка за API, ние също ще включим „кеширана“ стойност в нашия отговор. Redis съхранява данни в двойки ключ/стойност, следователно ще запазим searchTerm и неговите резултати, ще проверим redis дали searchTerm съществува. ако съществува, връщаме всички данни, свързани с този ключ, това също е известно като кеширане, ако не съществува, ще направим API заявка към NewsAPI сървъра и ще запазим данните в нашия redis-store, това е също известен като кеш-мис.

Наблюдавайте кеширания ключ в отговора.. втората заявка отне много по-малко време от първата заявка, тъй като данните вече бяха запазени в нашия redis store.

Предимствата на използването на redis за кеширане включват:

1. Скорост: Redis е хранилище за ключ-стойност в паметта, което означава, че може да съхранява и извлича данни много бързо. Това може да бъде особено полезно за кеширане на често достъпни данни или сесии, което може значително да подобри скоростта и производителността на Node.js API.

2. Гъвкавост: Redis е много гъвкаво хранилище на данни и може да се използва за широк набор от задачи за съхранение и извличане на данни. напр. кеширане, управление на сесии, класации и т.н. Тази гъвкавост може да го направи ценен инструмент за изграждане на сложни API на Node.js.

3. Мащабируемост: Redis може да мащабира хоризонтално чрез клъстериране на множество екземпляри заедно, за да обработва по-големи количества данни или трафик. Това може да помогне да се гарантира, че API за задната част на Node.js може да се справи с увеличаващия се трафик и обеми данни.

4. Устойчивост: Redis може също така да съхранява данни на диск, което означава, че можете да го използвате като първично или вторично хранилище на данни в Node.js backend API. Това може да осигури повече издръжливост и наличност на вашите данни, особено в случаите, когато основното хранилище на данни (база данни) не функционира или е недостъпно.

Недостатъците на използването на redis за кеширане включват:

  1. Redis е база данни в паметта, което означава, че нейният капацитет за съхранение е ограничен от количеството налична памет на сървъра. Докато Redis осигурява изключително бърза производителност, той може да не е подходящ за съхраняване на много големи количества данни, които надвишават наличната памет на сървъра. В такива случаи добавянето на повече памет към сървъра може да стане скъпо. Освен това Redis не е идеална опция за кеширане на медийни файлове, тъй като тези файлове могат бързо да консумират наличната памет. За кеширане на мултимедия се препоръчва да използвате облачни доставчици като Amazon S3 или Google Cloud Storage.

2. Липса на разширени функции за заявки: Redis е проектиран като просто хранилище на ключ-стойност, което означава, че не поддържа разширени функции за заявки като присъединявания, транзакции или търсене в пълен текст. Това може да е недостатък, ако трябва да извършвате сложни заявки за вашите данни.

3. Предизвикателства, свързани с устойчивостта на данни: Въпреки че Redis може да съхранява данни на диск, това не е традиционна база данни, базирана на диск, и нейните функции за устойчивост могат да бъдат по-сложни за настройка и управление от типичната база данни, базирана на диск. Това може да е недостатък, ако трябва да гарантирате, че вашите данни са много издръжливи и достъпни, и може да се наложи да приложите допълнителни стратегии за архивиране и възстановяване.

4. Ограничения на производителността на една нишка: Redis е еднонишкова по дизайн, което означава, че може да обработва само една заявка наведнъж. Това може да е недостатък, ако имате големи обеми едновременни заявки, тъй като може да ограничи общата пропускателна способност на Node.js backend API.

За достъп до пълния код -› https://github.com/conrad96/node-cache-redis

Благодаря ви, че прочетохте :)