Please enable JavaScript.
Coggle requires JavaScript to display documents.
REDIS - Coggle Diagram
REDIS
Conceitos Básicos
REDIS (Remote Dictionary Server) é um banco de dados em código aberto, baseado em memória e estruturado como chave-valor. Como chave valor ele tem...
Vantagens
Por ser em memória, tem alta performance
-
Desvantagens Dificuldade em consultas complexas (vai ter que trarar na aplicação e devolver apenas o dado) e dependência das chaves para recuperação de dados.
Embora seja em memória, possui várias opções de persistência para que não percamos os dados (impacta performance, pois a cada ação, executa um comando para sincronizar memória com disco). Esses bancos podem ser separados logicamente por contextos, mas sempre compartilhando os recursos do servidor Redis (mas não é recomendado em produção)
Suporta transações, permitindo operações atômicas
Possui mecanismo pub/sub para comunicação eficiente entre diferentes partes de um sistema (utilizado em casos de uso menores, onde você já tem a estrutura do REDIS pronta e precisaria criar uma de fila)
-
No teorema CAP, ele foca em C e P
-
Suporta streams tudo que acontece fica em um arquivo de log com todo o registro do banco de dados (alterações de escrita). Pode habilitar consumidores de dados para ler esses streams para jogar em um datalake, para outra mensageria, etc.
-
-
TTL
Comandos
-
PERSIST remove o TTL da chave, tornando-a permanente
Período de tempo durante o qual um dado armazenado no cache é considerado válido. Após o término, o dado é considerado expirado e deve ser removido/atualizado. Definido em segundos, minutos, horas ou dias
(+) Assegura que os dados sejam atualizados regularmente. Ajuda a gerenciar a quantidade de dados armazenados em memória, evitando acúmulo de dados obsoletos e otimizando o uso da memória
(-) Um TTL muito longo pode manter dados desatualizados, um TTL muito curto pode sobrecarregar o sistema com várias atualizações.
-
Modelagem de Dados
1:1
Primeiramente um relacionamento 1:1 no REDIS talvez não precisasse ser um relacionamento, poderia estar no mesmo registro. Somente se forem domínios diferentes pode fazer sentido. Chaves: user:<user_id> profile:<profile_id>
1:N
Uma das opções é utilizar listas ou conjuntos. Chaves author:<author_id>, livro book:<book_id>. Livros de um autor: author:<author>:books. (depois dos gets, utiliza rpush para unir livros ao autor)
N:N
Estudantes e cursos: Chaves: student:<student_id>, course:<course_id> student:<student_id>:courses course:<course_id>:students (depois dos gets, utiliza sadd para unir cada um dos grupos)
-
-
Transações e Pipelines
Transações
-
Comandos
-
WATCH Observa uma ou mais chaves. Se qualquer uma dessas chaves for modificada antes da execução da transação, a transação é abortada. UNWATCH cancela a observação das chaves
Usar com parcimônia, pois causa lentidão
-
Pipelines
Permite enviar vários comandos ao servidor em uma única solicitação, sem esperar resposta imediata de cada um deles, reduzindo o tempo de ida e volta entre cliente e servidor (round trip time), reduzindo latência e melhorando o desempenho. Com isso agrupa operações relacionadas, tornando seu código mais organizado e eficiente
Bom para otimizar ações que não precisam de uma precisão muito grande, ex.: contagem de cliques em anúncios
REDIS Sentinel
No REDIS é feita através de um servidor Redis (leitura/SLAVE) mantém uma cópia sincronizada dos dados de um servidor principal (MASTER), que lida com escrita. Vale ressaltar que essa sincronização é assíncrona, logo poderá temos consistência eventual
Com os dados replicados, é necessário o Sentinel, que é um recurso que monitora os nós e em caso de falha do master, ele elege algum slave no lugar. São vários nós de Sentinel conectados aos mesmos master e slave. Cada um marca um master/slave como inoperante e depois entram em um consenso (minimo 3 e sempre ímpar para termos maioria). Quando um master falha normalmente é escolhido o secundário com menor atraso de atualização
REDIS Cluster
Solução voltada para escalabilidade horizontal e distribuição de dados (sharding). No caso são vários servidor master e slave (logo, não precisa utilizar o Sentinel). Escala não apenas as leituras, mas as escritas também.
-
Cria um ambiente diferente de um REDIS normal. Ex.: alguns comandos que envolvem múltiplas chaves, como o MGET e o MSET só funcionam se as chaves estiverem no mesmo hash. Leituras podem exigir redirecionamento para o nó correto aumentando a latência. Consistência eventual ainda é maior, devido a quantidade de nós master e slave
Segurança
As ACLs do REDIS controlam basicamente as chaves que um usuário pode acessar e quais comandos podem ser executados