Dev (Back & Front)ARTIGO

Node + Cosmos DB + Azure Cache for Redis

Dando continuidade ao seu artigo anterior, Thiago Adriano mostra como adicionar uma camada de cache na aplicação utilizando o Azure Cache for Redis.

Node + Cosmos DB + Azure Cache for Redis
Imagem: Thiago Adriano

Dando continuidade ao meu artigo anterior “Azure Cosmos DB: CRUD completo com Node.js“, hoje eu irei demonstrar como adicionar uma camada de cache na nossa aplicação utilizando o Azure Cache for Redis.

Para os próximos passos utilizarei o projeto desenvolvido no artigo mencionado acima com o Node + Cosmos DB. Caso você tenha interesse em clona-lo, segue o seu link no meu GitHub:

Com o projeto clonado, vamos adicionar os pacotes necessários para trabalhamos com o Redis. Para isso, abra um terminal no seu computador, navegue até o local que você clonou o projeto node-cosmosdb e execute o comando abaixo:

bash
npm i redis --save

O próximo passo será criar o serviço no Portal Azure. Para isso, acesse o portal com os seus dados de acesso e siga os passos abaixo:

1. Navegue até o Azure Cache for Redis seguindo os passos Create a resource > Databases > Azure Cache for Redis:

Node Azure Cache for Redis

2. Preencha os dados abaixo:

  • DNS name: nome da sua aplicação/serviço
  • Subscription: sua assinatura
  • Resource Group: o grupo de recursos que você deseja cadastrar o seu serviço
  • Location: localização do seu serviço
  • Pricing Tier: plano que será configurado para sua aplicação

Abaixo você tem uma imagem demonstrando como eu configurei esse passo:

Node + Azure Cache for Redis

Agora clique em Create. Esse processo pode demorar alguns minutos. Assim que ele finalizar, você receberá uma notificação no portal – clique nela e vá até o novo serviço criado:

Com o serviço criado no Portal Azure vamos atualizar o nosso projeto. Para isso, abra o seu projeto e navegue até o arquivo personController.js. Em seguida, atualize ele com o trecho de código abaixo:

var redis = require("redis");

var client = redis.createClient(6380, "",
    { auth_pass: "", tls: { servername: "" } });

const PersonService = require('../services/personService');

exports.get = (req, res, next) => {

    client.get('allpersons', function (err, reply) {
        if (reply) {
            console.log('redis');
            res.send(reply)
        } else {
            console.log('db');
            PersonService.getAll()
                .then((person) => {
                    client.set('allpersons', JSON.stringify(person));
                    client.expire('allpersons', 10);
                    res.status(200).send(person);
                }).catch(err => res.status(500).send(err))
        }
    });
};


exports.getById = (req, res, next) => {
    const _id = req.params.id;

    PersonService.getById(_id)
        .then((person) => {
            res.status(200).send(person);
        }).catch(err => res.status(500).send(err))
};

exports.post = (req, res, next) => {
    const vm = req.body;

    PersonService.create(vm)
        .then(() => {
            res.status(200).send(`Pessoa criada com sucesso!`);
        }).catch(err => res.status(500).send(err))
};


exports.put = (req, res, next) => {
    let id = req.params.id;
    const vm = req.body;

    PersonService.update(id, vm)
        .then(() => {
            res.status(200).send(`Pessoa atualizada com sucesso!`);
        }).catch(err => res.status(500).send(err))

};

exports.delete = (req, res, next) => {
    let id = req.params.id;

    PersonService.delete(id)
        .then(() => {
            res.status(200).send(`Pessoa deletada com sucesso!`);
        }).catch(err => res.status(500).send(err))
};

Analisando o trecho de código acima, nós temos:

  • 02: estou adicionando o pacote do Redis
  • 04: passando os dados de acesso (pegaremos no portal no próximo passo)
  • 11: eu criei uma chave chamada allpersons, que deve expirar em dez segundos. Depois desse tempo ele vai no banco e atualiza o Redis com os novos dados.

Volte no Portal Azure e clique no serviço que você criou no passo anterior. Feito isso, vá até Access Keys e copie o valor de Primary:

Em seguida, vá até properties e copie o seu host e porta:

Agora preencha os valores do createClient no seu arquivo personController.js. Abaixo você tem uma imagem demonstrando esse passo:

Testando o Cache

Para verificar se o Redis está configurado corretamente, execute o comando npm start no seu terminal e abra o endereço localhost:3000/person.

Caso tudo esteja OK, seu primeiro request vai bater no banco, buscar os dados e atualizar o Redis. O Redis irá segurar o cache por 10 segundos, até expirar e realizar o passo anterior novamente. Abaixo você tem uma imagem demonstrando esse passo:

Node + Cosmos DB + Azure Cache for Redis

Bem simples, né?

No próximo artigo eu irei demonstrar como publicar esse projeto no Azure utilizando o App Service.

Caso tenha interesse em clonar o projeto desenvolvido neste artigo, segue o seu link no meu GitHub:

Espero que tenham gostado.

Até um próximo artigo, pessoal!

Thiago AdrianoAutor

Microsoft (MVP), atualmente trabalha como Arquiteto de Software para TV Bandeirantes. Nesses últimos anos, focou nas tecnologias criadas pela Microsoft, mas sempre esteve antenado para as novas tecnologias que estão surgindo no mercado. Em um breve resumo, é uma pessoa apaixonada pelo que faz, tem a sua profissão como hobby.

Ver perfil