Help! (nodejs, redis, queue)
Bom, estou com uma task para realizar e não sei o melhor jeito de fazer, vou descrever e falar o que pensei para realizar.
SITUAÇÃO PROBLEMA
O meu sistema tem uma tabela de usuário e cada usuário pode ter N contatos (uso o telefone para evitar duplicidade (pk)). Quando um novo usuário é criado preciso verificar na lista de contatos dos usuários para ver se alguém tem esse novo usuário adicionado na sua lista de contado. Caso tenha, preciso transformar o contado em uma relação de amizade (igual rede social). Ai começa a "task", além de pesquisar quem tem esse contato, preciso enviar e-mail para eles enviando que o contato agora está na plataforma e criar notificações para serem vistar no sistema.
MINHA POSSÍVEL SOLUÇÃO
Pensei em jogar isso para uma fila e rodar em background pois pode levar um certo tempo para ser realizado, utilizando eventos + nestjs + bull + redis.
Eu iria disparar um evento, pois isso vai impactar em algumas partes do sistema, um subscriber adicionaria na queue (bull + redis) e depois eu rodaria um background job.
O que acham ? alguem teria uma sugestão melhor e mais performática? É necessário a utilização de redis ou um node-cache daria conta ?
REDIS NÃO É CONFIÁVEL PARA GUARDAR INFORMAÇÃO. NÃO DEVE SER USADO PARA FILA
O que acontece se der um problema e o redis for reiniciado? Você perde TODAS as suas tasks.
Redis é um banco de dados de memória. Ele é uma ferramenta excelente para cache e lock distribuído.
Não deve ser usado em qualquer cenário que precise de persistência (Por mais que as pessoas usem erroneamente).
Se quer usar fila use RabbitMQ. É relativamente simples de usar.
Tirando esse fator sim, tua lógica tá certa, é isso mesmo que eu recomendaria que você faça.