AdonisJs é uma estrutura Node.js construída especificamente para escrever microsserviços. Como as estruturas de back-end obrigatórias, o AdonisJs oferece suporte ao Redis, o que ajuda a acelerar o tempo de solicitação/resposta em aplicativos, tornando o processo contínuo e o aplicativo leve. Redis, que significa Re mote Di reitoria S erver, é um código-fonte aberto, in-memory armazenamento de estrutura de dados.
Redis é um banco de dados de valor-chave persistente em disco com suporte para várias estruturas de dados ou tipos de dados , que significa que, embora ofereça suporte a strings mapeadas com base em valores-chave para armazenar e recuperar dados (análogo ao modelo de dados com suporte em tipos tradicionais de bancos de dados), também oferece suporte a outras estruturas de dados complexas, como listas, conjuntos, etc.
À medida que prosseguirmos, veremos as estruturas de dados suportadas pelo Redis. Em termos simples, ele armazena seus arquivos em cache para que você não precise fazer uma solicitação sempre ao seu banco de dados.
De acordo com as classificações do DB-Engines mensais, o Redis costuma ser o valor-chave mais popular banco de dados e também classificado entre os dez bancos de dados mais populares do mundo da tecnologia.
N.B. , você precisa ter o Redis instalado em sua máquina local, pois ele não funcionará com o AdonisJs se não estiver instalado localmente.
As instruções sobre como instalar o Redis em sua máquina de desenvolvimento podem ser encontradas aqui:
Durante a instalação, sua porta padrão deve ser definida como 6379
. Esta é uma porta dedicada para Redis, embora também use a porta 6380
se a outra estiver em uso.
Introdução e pré-requisitos
Neste tutorial, vamos cobrir como:
- Crie uma nova instância do aplicativo AdonisJs
- Instale o Redis e configure-o em nosso aplicativo
- Configure nosso banco de dados para fazer solicitações
- Use os métodos
get
eset
do Redis - Mostre a diferença no tempo da solicitação ao usar o Redis em comparação com fazer uma chamada direta do banco de dados
- Use os métodos pub/sub do Redis para publicar e assinar solicitações
Para prosseguir com este tutorial, você deve ter conhecimento básico de JavaScript, AdonisJs e bancos de dados SQL, pois este tutorial não cobrirá os fundamentos.
Requisitos do sistema
- Nó
- MySQL
- Redis
Para começar, precisamos instalar o Adonis CLI globalmente em nossa máquina local para que possamos usar os comandos CLI para criar e servir nosso aplicativo:
npm-g @ adonisjs/cli
A seguir, podemos criar um novo aplicativo AdonisJs e executá-lo usando o seguinte código; isso criará uma nova instância de AdonisJs. Em seguida, entramos na pasta do aplicativo e o executamos:
adonis new adonis_redis cd adonis_redis adonis serve--dev
Configurando o Redis para nosso aplicativo AdonisJs
Agora que nosso aplicativo está instalado e funcionando, vamos instalar o Redis:
npm install @ adonisjs/redis
Isso criará um novo arquivo chamado start/redis.js
, que conterá nosso método subscribe
. Abordaremos isso mais tarde no tutorial.
Quando a instalação for concluída, podemos registrar nosso provedor Redis dentro do arquivo start/app.js
:
provedores const=[ '@ adonisjs/redis/owners/RedisProvider' ]
Em seguida, adicionamos o código abaixo em nosso arquivo server.js
para iniciar o Redis no aplicativo. Sem essa adição, o Redis não será executado sempre que o aplicativo estiver em execução.
novo Ignitor (require ('@ adonisjs/fold')) .preLoad ('start/redis') .appRoot (__ dirname)
Agora vamos adicionar nosso REDIS_CONNECTION
ao arquivo .env
, que apontará para a configuração local
na configuração Arquivo/redis.js
.
REDIS_CONNECTION=local
Feito isso, iremos em frente e criaremos nosso controlador, rotas e modelo para buscar dados de nosso banco de dados e armazenar em cache os dados usando o Redis. Em seguida, buscaremos os dados do Redis no Postman para ver a diferença no tempo de resposta.
Configurando um banco de dados
Ter um banco de dados é fundamental para este tutorial, então vamos prosseguir e configurar um. Para fazer isso, vamos instalar o pacote @ adonisjs/lucid
em nosso aplicativo usando o código abaixo. Lucid é um SQL ORM para Adonis que armazena dados em um padrão de registro ativo :
adonis install @ adonisjs/lucid
Quando a instalação estiver concluída, podemos adicionar um provedor Lucid ao nosso arquivo start/app.js
, que adicionará o pacote Lucid a uma lista de provedores no aplicativo:
provedores const=[ '@ adonisjs/lucid/supplies/LucidProvider' ] const aceProviders=[ '@ adonisjs/lucid/supplies/MigrationsProvider' ]
Quando isso for feito, instalamos mysql
em nosso aplicativo usando o código abaixo:
npm install mysql
Em seguida, configuramos nosso arquivo .env
para se conectar ao nosso banco de dados usando a configuração mysql
. Isso é essencial porque, por padrão, AdonisJs usa SQLite para armazenamento de dados.
DB_CONNECTION=mysql DB_USER=root DB_PASSWORD= DB_DATABASE=adonis_redis
Agora altere a conexão em config/database.js
para a conexão MySQL:
conexão: Env.get ('DB_CONNECTION','mysql'),
Criando um controlador
Criaremos um controlador User
que buscará todos os usuários de nosso banco de dados. Para fazer isso, geramos um novo controlador usando o código abaixo:
adonis make: usuário controlador--tipo http
Em seguida, importamos nosso pacote banco de dados
em nosso arquivo UserController.js
para conectar e acessar o banco de dados:
//app/Controllers/UserController.js const Database=use ('Database')
A seguir, adicionamos uma função async
que chamará o banco de dados e buscará todos os usuários e retornará como JSON:
//app/Controllers/UserController.js índice assíncrono ({resposta}) { deixar usuários=esperar Database.table ('usuários'). select ('*'); return response.status (201).json ({ status: verdadeiro, mensagem:'buscou todos os usuários', dados: usuários }); }
Criação da rota de usuários
Com nosso controlador configurado, agora podemos configurar nossas rotas para que possamos fazer chamadas API para nosso aplicativo. Vá para start/routes.js
e adicione:
//start/routes.js Route.get ('users','UserController.index');
Criamos uma rota users
que chama nossa função index
no controlador User
. Agora podemos usar nossa rota em Postman para buscar todos os nossos usuários.
O tempo de resposta aqui é 2.07s, o que é bom para um aplicativo da web de baixo tráfego. Mas quando você está executando um aplicativo de alto tráfego com muitas solicitações acontecendo ao mesmo tempo, isso torna o aplicativo muito lento no tempo de carregamento.
Agora que testamos o aplicativo usando Redis para armazenar dados em cache, vamos prosseguir e usar o Redis para ver a tremenda redução no tempo de resposta, que é fundamental para tornar os aplicativos mais rápidos e fáceis de usar.
Usando os métodos get
/ set
O método get
obtém o valor de uma chave do Redis e retorna uma string. O método set
contém uma chave com valores de string, que sobrescreve o valor da chave se ele já contiver uma string. Podemos usar esses métodos em nosso arquivo app/Controllers/Http/UserController.js
para armazenar usuários em cache do banco de dados:
//app/controllers/Http/UserController.js índice assíncrono () { const cachedUsers=await Redis.get ('users') if (cachedUsers) { return JSON.parse (cachedUsers) } const users=await Database.table ('users'). select ('*'); aguardar Redis.set ('usuários', JSON.stringify (usuários)) usuários de retorno } }
Acima, estamos obtendo um valor dos principais usuários
e, se não estiver vazio, o retornaremos como um arquivo JSON. Se estiver vazio, estamos buscando no banco de dados e, em seguida, definindo uma nova chave com os dados do banco de dados.
Configurando pub/sub
Pub/sub implementa o sistema de mensagens em que os remetentes (chamados de editores no Redis) enviam as mensagens, enquanto os destinatários (assinantes) as recebem.
Para configurar nosso pub/sub, criaremos um sub em start/redis.js
. O sub se conectará ao banco de dados diretamente e salvará os dados em JSON sempre que uma sequência de publicação for iniciada.
Para começar, importe o banco de dados e o Redis em start/redis.js
:
const Database=use ('Database') const Redis=use ('Redis')
Em seguida, crie um novo método subscribe
que busca todos os usuários do banco de dados. set
cria uma nova chave users
que contém os valores de todos os usuários no formato JSON e os armazena no Redis.
//start/redis.js Redis.subscribe ('usuários', async ()=> { deixar usuários=esperar Database.table ('usuários'). select ('*'); aguardar Redis.set ('usuários', JSON.stringify (usuários)); })
Agora, em nosso controlador User
, importamos Redis, verificamos se um arquivo JSON users
foi criado e retornamos o arquivo; caso contrário, vamos ao nosso banco de dados, buscamos todos os usuários e publicamos a resposta.
//app/Controller/Http/UserController.js const Database=use ('Banco de dados') const Redis=use ('Redis') índice assíncrono ({resposta}) { deixe cachedUsers=await Redis.get ('users'); if (cachedUsers) { permitir que os usuários=JSON.parse (cachedUsers); return response.status (201).json ({ status: verdadeiro, mensagem:'buscou todos os usuários', dados: usuários }); }outro { deixar usuários=esperar Database.table ('usuários'). select ('*'); Redis.publish ('usuários',''); return response.status (201).json ({ status: verdadeiro, mensagem:'buscou todos os usuários', dados: usuários }); } }
Agora execute seus http://127.0.0.1:3333/users
no Postman. Observe a diferença no tempo de resposta:
O tempo de solicitação/resposta foi drasticamente reduzido-de 2.07s sem Redis para 33ms com Redis!
Conclusão
Neste tutorial, conseguimos criar um novo aplicativo AdonisJs e instalar o Redis nele. Em seguida, configuramos o Redis para armazenar dados em cache, configuramos nosso banco de dados, usamos os métodos get
, set
, publicação e assinatura do Redis e reduzimos o tempo de solicitação/resposta em nosso aplicativo.
Você pode clonar o repositório em seu sistema e ajustá-lo como desejar. Você terá que copiar o arquivo .env.example
e colar em .env
, e então usar adonis key: generate
para criar uma nova chave. Espero que este tutorial tenha sido útil.
A postagem Usando Redis em AdonisJs para armazenamento em cache de dados apareceu primeiro em LogRocket Blog .