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:
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:
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:
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!