BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Redis 4.0: Nova engine de replicação, melhorias no mecanismo de cache e muito mais

Redis 4.0: Nova engine de replicação, melhorias no mecanismo de cache e muito mais

Favoritos

O Redis é um banco de dados do tipo chave-valor (key-value) frequentemente referenciado como um SGDB para dados estruturados, uma vez que suas chaves podem armazenar strings, hashes, listas, conjuntos e conjuntos sorteados. Após 1 ano intenso de desenvolvimento, a versão 4.0 finalmente foi liberada e entre as novas funcionalidades podemos destacar:

PSYNC versão 2.0 - Um motor de replicação mais avançado. A forma como o handshake de replicação e as mudanças de propagação ocorrem entre mestres e escravos foi significativamente alterada. Agora, os escravos promovidos a mestres podem aceitar os antigos escravos (reconfigurados para apontar para o novo mestre) sem a necessidade de fazer uma ressincronização completa. Da mesma forma, os escravos podem ser interrompidos, atualizados e reiniciados, e podem continuar atrelados ao nó mestre apenas com uma ressincronização parcial.

Sistema de módulos Redis - Finalmente, é possível usar o Redis como um framework para escrever serviços em rede sem a necessidade de reinventar tudo a partir do zero. Os módulos podem estender o Redis com novas funcionalidades e estruturas de dados, implementar tipos que são exatamente como os tipos nativos (persistentes no RDB - Redis database file - e reescritos no AOF - append-only file), e existe além disso, um suporte experimental para bloqueio e tratamento de operações lentas. Foram introduzidos contextos de segurança de thread para os módulos. Este recurso ainda é uma API experimental no momento, mas a API é considerada estável e utilizável quando necessário. A API do módulo implementa uma camada de abstração completa que separa o núcleo do Redis da implementação do módulo, permitindo que o mesmo módulo seja carregado por diferentes versões do Redis sem modificações.

Melhoria no Cache - Uma nova estrutura de cache foi implementada para esta nova versão, agora o Redis suporta cache LFU (Least Frequently Used) além de LRU (Least Recently Used) como algoritmo de liberação de memória cache. De um modo geral, este recurso foi melhorado em vários aspectos incluindo aspectos relacionados a funcionalidade, performance e precisão. Mais detalhes sobre esta implementação podem ser compreendidos na publicação Random notes on improving the Redis LRU algorithm.

Melhorias nos comandos DEL, FLUSHDB e FLUSHALL - Estes comandos agora podem ser executados em uma thread diferente batizada de UNLINK (em substituição ao comando DEL) e usando a opção ASYNC dos comandos FLUSH. Estes novos recursos, juntamente com o novo comando SWAPDB, abre possibilidades interessantes para alternar atomicamente um determinado conjunto de dados para outro, possibilita determinadas cargas de trabalho usando apenas o comando DEL como um O(N) com muito menos sensibilidade à latência e pode melhorar também os tempos de configuração de replicação. Isso porque o nó escravo, se configurado para isto poderá fazê-lo. É possível também, a partir de agora, excluir o antigo conjunto de dados em segundo plano após um resync completo.

Novo modo AOF - A partir de agora é possível também habilitar um novo modo AOF que regrava o AOF em termos de um RDB preliminar mais uma cauda de AOF (AOF tail). Com isto, ganhamos reescritas mais rápidas, recargas mais rápidas dos dados e consequentemente menos problemas de latência.

Suporte ao Raspberry PI - O Raspberry Pi é agora uma plataforma suportada. Cada nova versão do Redis passa a ser testada no Pi por padrão. O código foi completamente auditado e corrigido para acessos em não conformidade, a análise da pilha de execução a partir de agora é suportada na plataforma ARM.

O comando MEMORY - O novo comando MEMORY, e especialmente o MEMORY DOCTOR, permite ter um melhor acompanhamento no uso de memória no Redis. A instrução MEMORY USAGE passa a indicar com precisão a utilização de memória por uma chave.

Melhorias na estrutura de Cache - A estrutura do Cluster Redis foi melhorada significativamente: a futura versão 4.2 se concentrará principalmente no Cluster e grandes novidades estão a caminho. Além disso, temos um melhor suporte a NAT e Containers, um mecanismo melhor para detecção de falhas (com um tráfego muito menor em grandes clusters) e uma menor carga de CPU em nós de um cluster quando comparado com a versão 3.2 do Redis.

Desfragmentação de memória ativa - Com esta nova versão, o Redis pode desfragmentar a memória enquanto estiver online caso o alocador Jemalloc seja utilizado (o padrão no Linux). Este novo recurso é útil para cargas de trabalho onde o alocador não pode manter a fragmentação suficientemente baixa, então a única possibilidade é que o Redis e o alocador colaborem para desfragmentar a memória.

Nota Importante aos usuários do Redis

Observe que, conforme especificado na lista de incompatibilidades, o protocolo de barramento de cluster do Redis 4.0 não é compatível com a versão 3.2 do Redis. Portanto, para atualizar, é necessário uma reinicialização em massa de todas as instâncias e rollbacks não são possíveis. Esta mudança foi necessária para adicionar compatibilidade para o NAT/Containers uma vez que a porta do barramento em um deslocamento fixo não tinha um design arquitetural aceitável para esta nova versão, por este motivo foi necessário alterar muitas funcionalidades e com isto os protocolos se tornaram incompatíveis.

Você pode ler o novo conjunto completo de melhorias disponibilizados nas notas de lançamento desta nova versão. Há melhorias significativas que podem fazer uma diferença real em casos de uso reais. Observe também que o Redis 4.0 é, normalmente, quase que 100% compatível com o Redis 3.2, por esta razão é muito raro que a compatibilidade com as versões anteriores esteja quebrada em termos de comandos.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

BT