Back-End

6 mai, 2019

Node + Cosmos DB + Azure Cache for Redis

Publicidade

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:

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!