Vídeos

Cache com Node.js e Redis

Thamyres Nunes
Escrito por Thamyres Nunes em 06/05/2021

Olá, tudo bem? O vídeo de hoje é um trecho de uma aula minha onde ensino como criar um cache de dados para aplicações Node.js bem simples mas eficiente usando Redis.

Leia o tutorial completo e baixe os fontes em https://www.luiztools.com.br/post/como-criar-um-cache-de-dados-com-redis-em-node-js/

– Meus cursos: https://www.luiztools.com.br/meus-cursos?utm_source=youtube&utm_medium=link&utm_campaign=cursos&utm_content=redis

– Meus livros: https://www.luiztools.com.br/meus-livros?utm_source=youtube&utm_medium=link&utm_campaign=livros&utm_content=redis

Me siga nas redes sociais: https://about.me/luiztools

Um abraço e sucesso.

Prof. Luiz

o Olá tudo bem Aqui é o Luiz e no vídeo
de hoje vamos falar de um conceito muito
bacana que pode dar um up na performance
das aplicações chamado Cash vou mostrar
como você pode na prática utilizando a
tecnologia arredios criar um teste da
sua aplicação para agilizar o acesso a
dados que são necessários com frequência
na sua aplicação esse vídeo ele é um
trecho curto e uma das lives exclusivas
que os alunos no curso de node JS tem
acesso então além de assistir esse vídeo
caso você queira saber mais informações
você encontra link na descrição E no fim
do vídeo também tem alguns vídeos
recomendados para você ver na sequência
Então vamos lá ó
e quando a gente tem algumas pectus a
nossa aplicação que é acessados
frequentemente ou que exija alguma
computação e se você ficar fazendo ela o
tempo todo ela vai consumir o recurso a
sua máquina né E que você queira guardar
este dado ou essa informação essa
computação né que maneira mais acessível
né Com acesso mais veloz mas simples
mais fácil o Cash é a solução pra isso
no fim das contas o que que é um Cash
Cash é uma memória dessa aço rápido para
um dado que Originalmente estaria numa
memórias a sua tanto no disco por
exemplo
e quando a gente estuda lá arquitetura
do computador a gente aprende que
memória RAM é rápido e que disco rígido
é lento e daí geralmente uma solução
muito comum para a gente fazer isso é
utilizando redes aqui é uma solução de
banco de persistência de dados não é
literalmente banco porque a gente não
sgbd tá como está acostumado a pensar em
sgbd mas ele é um a persistência de
dados não naqueles de persistência em
memória É com grande foco em acesso
rápido acesso volátil não é parte
persiste dados embora você tem mecanismo
rede para isso também não é o foco dele
persistência de dados mas sim essa linha
mais de Cash acesso rápido cálculos
rápido próximos rápidas etc mas eu
poderia criar uma variável memória uma
Rei memória eu acho que a gente faz isso
lá nas primeiras aulas no curso a gente
tem uma Rei memória para guardar as
coisas tudo mais isso já funcionaria
como um teste o que acho bem rústico bem
caseiro
e como cash no entanto quando eu começo
a querer colocar algumas regras por
exemplo vai ficar para sempre memória
quando que deve sair de memória
E se eu quiser fazer uma busca né
Barreto todo elementos meu cast para
encontrar elementos que têm algo em
comum e se eu quiser cruzar informações
aí se eu quiser de repente fazer uma
persistência assim desse meu cast e
tempos em tempos o quando eu começo a
complexificar um pouco mais né o meu
mecanismo fazer memória não parece muito
interessante Até porque eu fico pensando
demais no processo sentado a minha
aplicação eu colocar muita coisa ainda
molha né Isso pode achar uma aplicação
mais lenta mas mais pesada daqui a pouco
até fazer o da creche a isso não é
impossível né Se você pegar o seu
processo principal da aplicação e você
botar na casa aí dos gigabytes de
memória num único processo a tendência é
que algum momento ele trave e que ele
creche isso é normal independente da
tecnologia consumir a trabalhar eu vou
para o mecanismo com por exemplo o head
só que eu quero apresentar aqui para
vocês hoje o Red celery
o que hide.io ele é um já tô pensando
vamos código aberto ele é todo escrito
em C Se não me engano
e vocês baixam ele tá marcando de vocês
tem que compilar e lavar a casa de vocês
né dá um make para não terminar ele ele
compila e daí você tem um utilitário
gente comando chamado Régis traço serve
E você só vem não servidor Zinho de
redes na máquina de vocês eu tenho um
aqui rodando quando sobe ele fica com
esse ícone aqui em as caras né Eu tô com
ele rodando a canela por padrão e não
tenho usuário tem que sair não tem nada
ele ficou esperando na requisições para
ele é o padrão que tá rodando aqui na
máquina se vocês podem usar na nuvem tem
solução da rede Lab é que cobra de você
mandou diferente ABS faz eles fazer a
mesma coisa ficava lá por hoje tudo mais
então que eu tenho um negocinho de redes
funcionando e criei aqui uma aplicação
node né pelada sem nada aqui de especial
beleza só mesmo com Windows na onde que
vazio e um pé que Jason não tem nada
demais aqui
e o que que eu vou fazer para fazer
conexão com redes eu tenho que instalar
um pacote né de comunicação com ele
e você vê aqui na minha aplicação que
essa aqui teste Live eu vou dar uma npme
e eu tenho um pacote chamado redes né
que o projeto node-redis mas esse pacote
padrão ele não tem suporte a Promises e
consequentemente de suporte async-await
são recursos que eu gosto utilizar então
eu vou sugerir aqui que a gente usa um
outro pacote e é o promisse traço o
rádio
e esse pacote ele ele é um rapper ele
encapsula o pacote redes só para
fornecer suporte a prova a ele não é um
pacote obrigatório você pode usar sem
ele mas é você ter causado callbex ou
criando promessas na mão parece
pacotinho aquele já queria isso para
gente como instalar e aqui e aqui no meu
index
e eu posso dar o meu meu repare Não não
posso dar aqui um post né prédios para
receber um repare
in the promisse traz um Rex nenhum
Ministério aqui com esse objeto redes eu
trago do meu reparo eu posso chamar um
consulentes e vai receber um redes.
Creates poems eu tenho que tomar a
função raiz dele para ela ligar o resto
não esqueça disso
Ah então beleza carreguei aqui esse
objeto para chamar a função na
exportáveis para você redes e carreguei
o cliente do jeito que eu carreguei aqui
sem passar para não ter nenhum não é
opção nenhuma ele vai procurar um redes
aqui colocar o rosto na porta padrão sem
usuário sem senha aí depois eu posso
passar as opções né Para dar essas
informações para ele é parecido com o
banco de dados normal
a beleza tem o meu cliente de rede SAC o
head como é que ele funciona ele
funciona baseado em chave e valor ele
tem várias outras de dados sendo que as
curiosidades mais comum é a conjunto Ahn
em inglês conjunto é 71 e um conjunto
ele é baseado em elementos com chave e
valor sendo que as chaves ao são únicas
antes então pra dado uma chave Eu tenho
um valor pensa em aí como se fosse um
objeto um propriedades e valores né você
tem laço você criar um inconstante
cliente é você vai ter lá propriedade e
valor Tá mas nem quer um objeto amo
gigante com propriedade de valor será
que a gente chama de Charlie valor Ah é
mesmo dela
e esse é o jeito mais simples mais comum
e ao mesmo tempo mais útil de usar o
head mas o resto ele permite que você
armazene não apenas a chave valor mas
que você armazene tabelas hash e você
armazene dados geo-espaciais você
armazene buffers bitmap assim sem monte
de dados diferentes Então como é que eu
como é que eu adiciono um valor no meu
Cash eu vou pegar o meu cliente
eu vou usar que a operação 7
Oi e eu vou passar para ela uma chave
por exemplo estamos aqui de sabe é bem
criativo obviamente tem que botar a
chave aqui depois me permita buscar por
esse valor Então imagina que eu quero
salvar sei lá um número né Eu gostaria
que eu uma chave depois me lembre que
remeta a esse número
ó e aqui eu boto um valor qualquer que
eu quero colocar em pé tá essa operação
aquele há cinco anos né como tudo no
node.js não é novidade para ninguém
então aqui eu vou criar um if só para
gente conseguir usar assim tal Leite a
porque quem lembra da explicação
async-await sempre que eu quiser usar um
await
Olá eu sou obrigada a ficar dentro uma
função assim com a então assim como eu
não quero criar função e nada eu coloco
nesse bloco esse alto executa conectivos
chamado tá é um wi-fi que vai pegar de
baixo quando ele terminar Inclusive eu
posso pegar aqui um um resultado dele e
imprimir no consagra a
eu vou pegar aqui é um node ainda ex deu
um ok ok que imprimiu aqui é esse resumo
tarde Tá OK quando funciona beleza como
é que eu busco um elemento que eu salvei
neste cast do Regis que eu salvei no
redes com esse mesmo cliente eu posso
dar um jet passando o valor a chave
Desculpem a chave eu vou receber o valor
como retorno os eu quero pegar aquela
chave ali eu vou ter que é um result 2
que vai receber uma Leite daquela chave
ali eu posso imprimir
em seus últimos dois para mostrar a
vocês que vai vir aquele valor lá aí tô
comentando aqui em cima Esse valor já
está salvo no web
o prazer que está agora imprimir o valor
ou seja ele buscou na memória
corretamente M imprimiu aqui no console
então está funcionando hides aqui certo
então faz bem básica salvo uma chave com
o valor e pego essa chave depois você
que é o mínimo do mínimo do mínimo certo
e aí em cima disso a gente começa a
construir uma série de inteligência
e por exemplo
o Cash o Régis dando um passo para trás
um remédio para ver se ele é um banco e
memória certo uma persistência de dados
em memória então se eu derrubar esse meu
servidor Zinho de redes aqui um padrão
eu perco tudo tá nele aí é só o padrão
dele se eu quiser que eles Alvim dias
que eu posso criar uma série de regras
tá de quanto em quanto tempo ele vai
salvar e tudo mais mas não é o foco dele
tem preço Tem sim disso a ordem ao
organismo são outras alguns salários mas
não é o foco dele não usem l com foco de
subtrair banco de dados aí não foi
criado para isso
é Mas se por exemplo eu quiser que um um
a chave ela desapareça automaticamente
que isso é padrão encaixe né imagina que
eu vou colocar um dado em teste eu não
quero que ele fique essa para sempre eu
quero que ele fique enquete mencionado
período de tempo e depois eles uma se eu
tenho tempo né que essa chave deve sumir
sozinha do Red se eu posso passar um
terceiro parâmetro para o 7 onde eu digo
o modo g a inspiração aqui vou usar o
modo IKS né que é o modo padrão de
inspiração que nem permite e um outro
parâmetro dizer o número de segundos
este valor vai existir no meu redes
então por exemplo vou jogar aqui 30
segundos a parte um exemplo rápido
e eu tô dizendo guarda com essa chave
esse valor com uma inspiração em 60
segundos certo então agora com ele
salvar isso vai ficar salvo por apenas
rapidamente
e eu Okay começou a correr o tempo ali
da nossa chave então pegar aqui agora e
mandar consultar por ela nos próximos
dez segundos vai vir o valor mas em
algum momento né ele não vai retornar
mais vai tomar no aqui para nós então eu
posso salvar quantas Chaves eu quiser no
redes na verdade quando eu tiver de
memória né porque todas as chaves não
está sendo salvas e memória Então vai
ser é o uso bem interessante a na
prática como é que eu tudo isso em
alguma aplicação eu vou criar um outro
arquivo chamado Teste. JS
e eu vou instalar uma outra dependência
ó já expirou tá vendo outono aqui para
não ta mais online
e eu vou criar aqui uma aplicação que
vai se conectar no mais Kelly tá então
vou te falar que o pacote mais que ele
dois eu não vou usar você foi lá e vou
fazer com SQL tradicional para mostrar
pra vocês eu vou carregar a minha
biblioteca do mais Kelly certo então tio
Rick Fire
bom demais Kelly dois/trouxe os mais
caridoso que transporta provas também e
eu vou carregar tem uma conexão aí vou
tomar um leite aqui e mais Kelly.
Crítico Connection passando aqui com
essa strang é mais querem:
barra/localmente aqui eu tô com root no
Stones em arroba local host Inter 306 e
o nome do meu banca crude aí semana que
tá criado eu tenho uma tabela cliente
nele com mil clientes fake ela só pra
gente fazer essa brincadeira aqui e daí
com este com eu posso fazer as consultas
certo então é que fazer uma compra em
uma consulta normal sem Cash eu falei um
select as telhas foram clientes Where ID
igual a interrogação limites 1
ó e aqui eu passo como segundo parâmetro
os argumentos que não substitui as
minhas interrogações então aqui eu vou
buscar o cliente com Líder 800
é isso aqui vai me trazer linhas
e eu vou imprimir linhas na posição
zero. Nome Benedita sabe vou tomar leite
uh
bom então o cliente do de 800 é o nome
tenho esse banco beleza Imagine que por
algum motivo eu tenho que acessar muitas
vezes neste mesmo cliente os podem
tratar isso com uma mensagem lá que o
senhor está muitas vezes com toda vez
que acessar ia ele ia lá no meu banco
aqui em Santana né gente aqui o banco da
minha máquina tem que colocar o registro
tudo mais mas a gente eu sei que essa
toda vez o mesmo banco quanto será que
ele me consome do tempo vamos vamos ver
aqui com Sally. Time
eu vou botar aqui mais Kelly
ó e aqui embaixo um console. And time
are and mais quer quanto que você me
consome a tão aliás me consome hoje 110
milissegundos certo nessa média né Vamos
ficar para baixo pegar os meus irmãos
E é isso que tá me tomando de tempo aqui
ó
E agora se eu fizer isso aqui é uma vez
é isso né Cada Vez acontece isso mas se
eu fizer por exemplo um laço nós vamos
botar um laço uma conexão só o Far that
x igual a zero 1 x menor aqui 1000x mais
mais
e eu vou fazer mil vezes esta mesma
operação aqui de consultar o mesmo
cliente por algum motivo bizarro espaço
de na minha pregação e
bom então eu levo 673 65 anos eu só não
levo mais tempo Porque eu mais Kelly
internamente ele entende né que poxa se
cara tá o tempo todo dançando esse mês o
cliente ele tem alguns meses de caixa
internos Tá mas ainda assim ela tem que
dar um tempo aí relaxamento durante a
a beleza agora vou botar Cash como é que
a gente implementam naqueles um De Cash
aqui
o da primeira vez que eu for ir no banco
antes da primeira vez na verdade a Eu
disse que eu quero o cliente o usuário
sei lá ele fez uma questão na tela ele
pedir uma informação enfim eu descobri
que eu preciso do cliente o primeiro
passo é eu ir no redes então deixa
trazer esse código do rádio placar
eu vou botar ele aqui em cima é a
Primeiro passo é eu ir lá no redes e
perguntar para o redes me dá um gato aí
eu já tenho um cliente com esta chave
qual é a chave eu vou usar aqui a chave
Como o próprio dentro do cliente tá
poderiam pensar no Machado mais
interessante mas como no nosso caso o ID
do cliente Ele é o único né Ele é uma
chave ela também interessante tá mas é
algo questionável Beleza eu vou colocar
aqui a nossa chave
e vai ser o ID do cliente Isso aqui vai
me trazer é um resultado vai trazer um
cliente por exemplo
Tá certo
e Se esse cliente
e veio nulo Ou seja eu não tinha ele
enquete o que que eu tenho que fazer
e eu tenho que ir no banco né Eu não
tenho encaixa então vou ter que ir no
banco com vida dele para pegar né a
informação
e eu vou te fazer um tratamento para
guardar a informação Então vou pegar
aqui Rose na zero e eu vou guardar isso
no régios É tem que salvar esse Novex
agora né então vou dar 17 qualquer minha
chave é o ID do cliente e qual que é o
conteúdo eu vou guardar um Jason. String
Fairy túnel objeto Ok eu não consigo
guardar o objeto cru lá no no reino de
guardar o Jason dele em formato de
Finger ó eu vou guardar aqui se fosse
uma palavra primitiva conseguiria tá
umas treino sol número mas não é como um
objeto mais complexo igual Eu estendi
fico ele guardou lá dentro e eu posso
ainda colocar aquele parâmetros
inspiração que nem mostrar para vocês
então nos próximos 60 Segundos
e por exemplo esse objeto está em
memória eu vou que declarar que antes
é um let
e vê se não vai me parecidos né muita
máquina de
o cliente Cash
e os homens meio parecido demais mas não
ver que a gente cast
oi e daí aqui
e eu vou fazer se não veio então eu vou
no banco salvo encaixe e jogo esse
objeto o cliente Cash
é essa a Rose masaro aqui joga para ele
também fica aqui embaixo eu vou imprimir
e esse cliente caixa. Não beleza
bom então isso aqui eu tenho que tomar
cuidado que quando ele vem de lá ele vem
como estendi né mas só tem que fazer um
Mustang frio aqui
Oi para ele
oi pra ele converter faz um tarsis com
eles converter Então vou pegar os
clientes Cash receber um Jason. Parce
e no carro pequeno de Cash e daqui
embaixo um primo que a gente quer
funcionar
é com esse é um mecanismo em que na
primeira vez que eu tentava buscar esse
cliente ele vai ter que ir no banco mas
aí ele já deixa uma cópia em cache e me
torna o que ele encontrou no banco uma
segunda chamada ele vai encontrar já no
cash ele não vai fazer cif ou seja não
vai no banco ele já vai me trazer no
cash eu imprimo nos dois O resultado vai
ser o mesmo o cliente fecha. Nome se eu
fizer isso uma vez
e eu vou ter um tempo para poder
comparar com esse uma vez aqui no mais
Kelly e daí depois eu rodo o mil vezes
E se eu fizer aqui uma vez só eu tive
ali 92 Alerta que eu modulação da minha
própria máquina tá ela tá processando
aqui a gravação do Sul também eu
consideraria Um empate técnico tá não
nome dele é que foi mais rápido do que
eu estou indo mais velha mas vamos botar
aqui 92 quem apareceu ali mas ali A
diferença é bem Sutil agora quando eu
faço
a mil vezes
e daí de fato eu começo a usar a ideia
do Cash certo quando eu faço uma vez só
eu acabo tendo mais trabalho vou no
banco também salve e feche e tudo mais a
partir da segunda segunda vez que eu
pensar em cidade eu tô começa a ter
ganho do Clash
eu vou pegar aqui eu vou dar agora eu já
tenho aí ó uma diferença mais educativa
né 347ml segundos contra 663
bom então daí você começa a ver o
benefício se eu for usar poucas vezes
dado não tem grandes benefícios agora em
caixa agora se eu vou usar muitas vezes
eu começo a ter diferença das
iniciativas neste nosso exemplo aqui bem
simples na casa de cinquenta por cento
mas eu aumentar isso aqui
proporcionalmente a diferença começa a
ficar cada vez mais gritante tá bom se
eu pegar aqui geral Cash
E aí
e é sozinhas daqui já chega o meu crush
aí botar 10 mil vezes indo no banco já
levou segundos então 10 mil vezes eu tô
falando aí de 6.7 e 23 segundos e se eu
fizesse mesmo processo Usando o
mecanismo de caixa
é mas é lá que eu vou fazer 10 mil
disparos de meio é da mesma mensagem eu
tô falando aí de 2.0 17 segundos
a mãe está falando uma grandeza de três
vezes menos tempo já não é mais
cinquenta porcento tá falando aí de bem
mais nerd de cinquenta por cento de
tempo a menos na escola de trinta por
cento do que eu tava levando antes para
executar a 10 mil operações A então
conforme quanto maior for o volume de
requisições aos mesmos dados maior vai
ser a diferença de um teste vai fazer na
aplicação de você está melhor E aí
curtiu a lição querendo aprender mais
comigo se inscreve aqui no canal YouTube
deixe seu like também para valorizar meu
trabalho continuar incentivando a
liberar novos na plataforma mas
principalmente dá uma olhada na
descrição desse vídeo onde você vai
encontrar link para conhecer os meus
livros que eu tenho publicado e os meus
cursos que eu tenho também a sua
disposição para você dar um up no seu
aprendizado das técnicas existentes tem
um abraço e até a próxima valeu

Olá, tudo bem?

O que você achou deste conteúdo? Conte nos comentários.

Assista também

WebSockets Client em 15 min! (exemplo em Node.js com Binance)

React Native CLI - Testando em smartphone Android - Aula Grátis #02

Dicas para currículo de devs

06 dicas para bots de criptomoedas

Sequelize em 15 minutos, direto ao ponto! (2021)

React Native CLI - Configurando no Windows - Aula Grátis #01