Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Redis vs. Memcached – Comparação de 2021

Redis significa RE mote DI cionário S erver, criado em 2009 por Salvatore Sanfilippo. O Memcached, por outro lado, foi criado em 2003 por Brad Fitzpatrick. Tanto o Redis quanto o Memcached são:

  • Estruturas de dados na memória NoSQL
  • Escrito em C
  • Código aberto
  • Usado para acelerar aplicativos
  • Suporte para latência abaixo de milissegundos

Em 2014, Salvatore escreveu um excelente post do StackOverflow sobre quando faz mais sentido usar o Memcached do que o Redis. Neste post, fornecemos uma comparação atual e detalhada entre o Redis e o Memcached para que você possa fazer uma escolha informada sobre o uso deles em seu aplicativo.

Infográfico


Este post foi condensado no infográfico abaixo. Com este infográfico você pode visualizar facilmente os resultados desta comparação para ver qual deles se sai melhor em diferentes cenários. Se quiser ler a comparação em formato de texto, clique aqui.


Documentação

Para começar, o Redis é muito mais documentado do que o Memcached. Isso torna mais fácil aprender, administrar e usar.

Modelo de banco de dados

O Redis é principalmente um armazenamento de valores-chave. Embora as chaves sejam strings binárias, a vantagem do Redis é que o valor não se limita apenas a strings binárias. Eles podem ser uma variedade de estruturas de dados que permitem o armazenamento de objetos complexos e fornecem um rico conjunto de operações sobre eles. O Redis também oferece extensibilidade por meio de módulos Redis. Os módulos Redis são extensões que fornecem estruturas de dados e recursos adicionais não disponíveis no conjunto de recursos principais. Aqui está uma amostra de alguns recursos que agora estão disponíveis como módulos:

  • Loja de documentos
  • Gráfico SGBD
  • Mecanismo de pesquisa
  • SGBD de série temporal

Memcached é um armazenamento de valores de chave simples que suporta apenas strings binárias como valor.

Estruturas de dados

Como mencionado acima, o Redis oferece vários tipos de estrutura de dados, permitindo que seja extremamente flexível de usar, incluindo Strings, Hashes, Lists, Sets, Sorted Sets, Bitmaps, Bitfields, HyperLogLog, Índices geoespaciais e fluxos. Você pode saber mais sobre isso neste artigo Principais casos de uso do Redis por tipos de estrutura de dados principais.


Fonte da imagem:https://redislabs.com/redis-enterprise/data-structures/

O Memcached suporta apenas strings binárias simples que são ótimas para dados somente leitura, então se você não precisa de todos os sinos e assobios do Redis, o Memcached é um banco de dados mais simples para você usar.

Classificação e popularidade do banco de dados

A maior popularidade de um banco de dados resulta em uma comunidade maior de usuários, mais discussões e tutoriais gerados por usuários e mais ajuda e suporte por meio de ferramentas de terceiros, como plataformas DBaaS e ferramentas de análise para ajudar a otimizar suas implantações.

O Redis é o 8º banco de dados mais popular do mundo em fevereiro de 2021, de acordo com a DB-Engines devido à sua simplicidade, estruturas de dados ricas e ótima documentação. O Memcached é atualmente classificado como o 28º banco de dados mais popular. Quando o Redis e o Memcached são classificados em relação aos modelos de banco de dados de valor-chave, o Redis fica em 1º e o Memcached em 4º. No entanto, se você estiver procurando apenas um banco de dados de valor-chave de código aberto ou um que possa ser implantado no local, o Memcached vem em segundo lugar, pois o Amazon DynamoDB e o Microsoft Azure Cosmos DB são bancos de dados comerciais que só podem ser implantados em a nuvem.


Arquitetura

Redis e Memcached seguem client-server arquitetura. Os clientes preenchem os dados no servidor na forma de valor-chave.

O Redis é de thread único, enquanto o Memcached possui uma arquitetura multithread. O Memcached é melhor dimensionado em um sistema com mais núcleos que podem lidar com mais operações se a capacidade de computação for dimensionada. No entanto, mais de uma instância do Redis pode ser iniciada no mesmo sistema para utilizar núcleos adicionais.

Facilidade de uso

Como explicado acima na seção Modelo de banco de dados, o Redis, sendo um banco de dados multimodelo, pode ser usado com qualquer tipo de modelo de dados. No Redis, é fácil escrever código, pois simplifica tarefas complexas. O Redis possui estruturas de dados avançadas e não se limita a valores de string simples. Por exemplo, se seu aplicativo armazena dados em conjuntos e você deseja acompanhar os conjuntos em uma lista, você pode fazer isso facilmente no Redis. Uma tarefa semelhante no Memcached não é possível. Mas existem outras maneiras de fazer as mesmas tarefas que exigirão mais linhas de código.

O Memcached, por outro lado, armazena apenas valores de string simples. Assim, a aplicação é deixada para lidar com a complexidade da estrutura de dados.

Particionamento de dados

O Redis oferece suporte ao particionamento de dados em várias instâncias de nós. Os usuários atuais do Redis aproveitam diferentes técnicas, como particionamento de intervalo, particionamento de hash e hash consistente para particionamento de dados. No Redis, o particionamento de dados pode ser implementado de três maneiras diferentes:

  • Particionamento do lado do cliente
  • Particionamento assistido por proxy (exemplo:twemproxy)
  • Particionamento do lado do servidor com roteamento de consulta nos nós do cluster

O Memcached também oferece suporte ao particionamento de dados em vários nós, e o hash consistente é uma abordagem recomendada para garantir que a carga de tráfego seja distribuída uniformemente.
Redis vs Memcached - Comparação de 2021Click To Tweet

Idiomas suportados

O Redis suporta quase todas as linguagens de programação mais usadas, desde linguagens de alto nível até linguagens de baixo nível. O Memcached, no entanto, suporta um número menor de idiomas em comparação com o Redis, mas suporta todos os idiomas populares.

Memcached

  • .Net
  • C
  • C++
  • ColdFusion
  • Erlang
  • Java
  • Lisp
  • Lua
  • OCaml
  • Perl
  • PHP
  • Píton
  • Rubi

Redis

  • C
  • C#
  • C++
  • Fechar
  • Cristal
  • D
  • Dardo
  • Elixir
  • Erlang
  • Fantástico
  • Ir
  • Haskell
  • Haxe
  • Java
  • JavaScript (Node.js)
  • Lisp
  • Lua
  • MatLab
  • Objetivo-C
  • OCaml
  • Pascal
  • Perl
  • PHP
  • Prólogo
  • Dados puros
  • Píton
  • R
  • Rebol
  • Rubi
  • Ferrugem
  • Escala
  • Esquema
  • Conversa fiada
  • Rápido
  • Tcl
  • Visual Basic


Transações

As “transações” do Redis são executadas com as três garantias abaixo:

  • As transações são serializadas e executadas sequencialmente
  • Todos os comandos, ou nenhum, são processados ​​(transações atômicas)
  • O bloqueio otimista oferece uma garantia extra usando check-and-set

O Redis garante que todos os comandos de uma máquina cliente sejam executados de uma só vez. Todos os comandos nas transações são executados quando o comando “EXEC” é chamado para garantir a atomicidade.

O Memcached, por outro lado, não oferece gerenciamento de transações.

Replicação

O Redis oferece uma replicação simples de líder-seguidor (mestre-escravo) que cria cópias exatas das instâncias mestre, com estes recursos:

  • O mestre continua enviando comandos de dados para o escravo enquanto ele estiver conectado.
  • Se a conexão for interrompida, o escravo seguirá a ressincronização parcial copiando apenas os dados que foram perdidos durante a desconexão.
  • Se a ressincronização parcial não for possível, ele tentará uma ressincronização completa.

Você também pode aproveitar os recursos de alta disponibilidade, Redis Sentinels ou Redis Cluster, para proteção avançada contra failover.

O Memcached nativo não oferece suporte à replicação, mas você pode usar o Repcached, um patch de código aberto gratuito para obter alta disponibilidade para sua implantação. Ele oferece replicação de vários mestres, replicação de dados assíncrona e suporta todos os comandos do Memcached.

Fotos/Persistência

Snapshots são simplesmente uma visualização somente leitura do seu banco de dados como era em um determinado momento. O Redis oferece suporte a instantâneos e, por padrão, o Redis salva instantâneos do conjunto de dados no disco em um arquivo binário chamado dump.rdb. Você pode chamar manualmente um instantâneo ou personalizar a frequência ou alterar o limite para executar a operação.

Aqui estão as duas opções de persistência que o Redis suporta:

  • Persistência RDB
  • Persistência AOF

RDB significa “Redis Database Backup”. É um instantâneo compacto e pontual do banco de dados em um momento específico. Ele ocupa menos espaço, maximiza o desempenho do Redis e é bom para recuperação de desastres.

AOF significa “Anexar Somente Arquivo”. O AOF acompanha todos os comandos executados e, em uma situação desastrosa, reexecuta os comandos para obter os dados de volta. Esse método ocupa mais espaço, pois todos os comandos são executados novamente e não é um método muito durável de captura instantânea.

O Memcached, por outro lado, não suporta persistência de disco.

Scripts do lado do servidor

Lua é a linguagem de script incorporada para seu servidor Redis, disponível a partir da versão 2.6, que permite realizar operações dentro do Redis para simplificar seu código e aumentar o desempenho. As duas principais funções usadas para avaliar scripts usando o interpretador Lua são:

  • AVALIAÇÃO
  • EVALSHA

Quando o script Lua está sendo executado, todas as outras requisições são bloqueadas conforme mostrado na figura abaixo.


O Redis também inclui o depurador de scripts Lua na versão 3.2, o que facilita a escrita de scripts complexos e ajuda a melhorar o desempenho.

O Memcached não suporta nenhum script do lado do servidor.

Escalabilidade

Existem duas técnicas para dimensionar horizontalmente seu banco de dados Redis:

  • Adicionar fragmentos em clusters do Redis
  • Adicionar nós a uma configuração Redis HA (mestre/réplica)

Você também pode dimensionar verticalmente sua configuração do Redis quando precisar de mais memória ou computação. Isso pode ser feito sem tempo de inatividade se você tiver uma configuração de alta disponibilidade ou usar a tecnologia Redis Cluster.

O servidor Memcached não fornece um mecanismo para distribuir dados entre nós (fragmentação). Portanto, no Memcached, a escalabilidade horizontal é tão simples quanto adicionar mais nós – o problema de particionar seus dados em diferentes shards terá que ser feito no nível do aplicativo/cliente. Existem algumas ferramentas de código aberto que podem ajudá-lo com isso.

Protocolo de comunicação

O Redis usa TCP como protocolo de rede e não suporta UDP.

O Memcached suporta os protocolos de comunicação TCP e UDP. Os dados são enviados ao servidor Memcached de duas formas:

  • Linhas de texto:envie comandos e receba respostas do servidor.
  • Dados não estruturados:receba ou envie informações de valor para uma determinada chave, e os dados são retornados no mesmo formato fornecido.

Políticas de remoção de cache compatíveis

O Redis oferece suporte a diferentes tipos de políticas de despejo. Vamos dar uma olhada em alguns.

  • não despejo:  Em “noeviction”, um erro é retornado quando a memória atinge o limite.
  • allkeys-lru:  Lru significa “usado menos recente”. Esta política remove os dados usados ​​menos recentemente.
  • todas as teclas-lfu:  Lfu significa “menos frequentemente usado”. Esta política remove os dados usados ​​com menos frequência.
  • todas as teclas aleatórias:  Esta política remove os dados aleatoriamente.
  • volátil-lru:  Os dados voláteis estão com o conjunto de dados de expiração. Esta política remove os dados voláteis usados ​​menos recentemente.
  • volátil-lfu:  Os dados voláteis estão com o conjunto de dados de expiração. Esta política remove os dados voláteis usados ​​com menos frequência.
  • volátil-aleatório:  Esta política remove os dados voláteis aleatoriamente.
  • volátil-ttl:  “TTL” significa tempo de vida. Esta política remove os dados que têm o menor tempo de vida.

O Memcached usa o algoritmo LRU para remover dados quando o espaço é necessário. Ele primeiro procura os dados já expirados para excluir se os dados expirados não estiverem disponíveis, o algoritmo LRU é usado.

Publicar e assinar mensagens

O Redis é compatível com mensagens Pub/Sub (publicar e assinar). Existem três comandos que são usados ​​para esta finalidade.

O cliente usa:

  • Inscrever-se
  • Cancelar inscrição

Assinar e cancelar assinatura são usados ​​para receber mensagens de um canal específico.

O servidor usa:

  • Publicar

O “publish” é usado para enviar dados aos clientes.

O Memcached não suporta mensagens de publicação e assinatura.

Suporte a fluxos

O Redis suporta fluxos semelhantes ao Kafka com versão 5.0 ou superior usando uma nova estrutura de dados “Redis Streams”. O Redis Streams tem o conceito de grupos de consumidores, como o Apache Kafka, que permite que aplicativos clientes consumam mensagens de forma distribuída, facilitando o dimensionamento e a criação de sistemas altamente disponíveis.

O Memcached não oferece suporte nativo para Streams, mas existem ferramentas de biblioteca de código aberto como o Kafcache para processamento de stream com baixa latência.

Suporte geoespacial

O Redis tem uma estrutura de dados chamada índices geoespaciais que armazena os dados de longitude e latitude de um local. Você pode realizar diferentes operações nos dados geoespaciais, como calcular a distância entre dois pontos ou encontrar lugares próximos.

O Memcached não possui nenhuma estrutura de dados especial para lidar com dados geoespaciais.

Desempenho

Uma comparação de desempenho entre armazenamentos de dados de valor-chave na memória é mais um exercício intelectual do que qualquer importância prática – a menos que você esteja implantando sistemas em tal escala que isso se torne interessante uma medida de redução de custos. Isso ocorre porque esses armazenamentos são vinculados a IO e, geralmente, a latência da rede pode desempenhar um papel maior na latência percebida do aplicativo do que a latência do banco de dados.

Um aspecto de desempenho mais prático é a eficiência do armazenamento – quantos dados podem ser empacotados na mesma quantidade de memória. Mesmo aqui, as estruturas de dados internas usadas pelo Redis variam de acordo com o tamanho dos dados. Portanto, qualquer discussão sobre desempenho entre esses bancos de dados deve ser tomada com cautela.

Vamos dar uma olhada em algumas comparações mostradas em um trabalho de pesquisa de 2016. Neste artigo, os autores experimentam os bancos de dados em memória amplamente utilizados para medir seu desempenho em termos de:

  1. O tempo necessário para concluir as operações.
  2. Com que eficiência eles usam a memória durante as operações.

Versões de banco de dados usadas no artigo:

Banco de dados Versão
Redis 3.0.7
Memcached 1.4.14

Operação de Gravação

Ao gravar dados, como você pode ver, na tabela abaixo, o Memcached mostra uma velocidade excepcional mesmo depois que o número de registros chega a um milhão.

O tempo calculado para gravar pares de valores-chave (ms)

Número de registros
Banco de dados 1.000 10.000 100.000 1.000.000
Redis 34 214 1.666 14.638
Memcached 23 100 276 2.813

Operação de leitura

A leitura de dados permanece quase consistente no Redis, mesmo para um milhão de registros, mas no Memcached, à medida que o número de registros aumenta, o tempo também aumenta um pouco.

O tempo decorrido para ler o valor correspondente a uma determinada chave por banco de dados (ms)

Número de registros
Banco de dados 1.000 10.000 100.000 1.000.000
Redis 8 6 8 8
Memcached 9 14 14 30


Uso de memória

Ao discutir o uso de memória, o Redis é sempre o melhor, como você pode ver nos resultados.

Usos de memória de bancos de dados na memória para operação de gravação (MB)

Número de registros
Banco de dados 1.000 10.000 100.000 1.000.000
Redis 2,5 3,8 4.3 62,7
Memcached 5,3 27,2 211 264,9

Como você pode ver, o Redis é melhor que o Memcached.

Usos de memória de bancos de dados na memória para operação de exclusão (MB)

Número de registros
Banco de dados 1.000 10.000 100.000 1.000.000
Redis 0 0 0 0
Memcached 2.2 2.1 2.2 2.2


Serviços gerenciados/suporte

A maior popularidade e comunidade do Redis também levou à necessidade de serviços gerenciados, hospedagem e suporte. Os provedores de banco de dados gerenciados populares para Redis™* incluem ScaleGrid, Redis Labs, AWS Elasticache, Azure Cache e DigitalOcean. Esta página fornece uma ótima comparação dos principais fornecedores do Redis™. O Redis também possui extensas ferramentas de relatórios internos, como acertos de cache, uso de memória, operações e até mesmo uma consulta lenta registrada.

Os serviços gerenciados para Memcached estão muito menos disponíveis, mas ainda são compatíveis com o Amazon Elasticche.

Suporte para segurança da camada de transporte (TLS)

O Redis tem suporte nativo a TLS a partir do Redis 6.0. Versões anteriores do Redis recomendavam o uso de stunnel para fornecer suporte a TLS.

Versões do Memcached 1.5.13 e superiores suportam autenticação e criptografia via TLS. Esse recurso ainda está em fase experimental.

Autenticação

Até o Redis 5.x, o Redis só suportava uma autenticação simples baseada em senha. Essa senha foi armazenada em texto simples no servidor. O Redis na versão 6.0 em diante oferece suporte a uma ACL com todos os recursos.

O Memcached versão 1.4.3 e superior tem suporte SASL. Anteriormente, o Memcached não tinha camada de autenticação.

Resumo

Redis e Memcached são ótimos e têm aplicações em diferentes áreas. O Redis que está sendo desenvolvido posteriormente possui muitas funcionalidades avançadas e possui ótima documentação e comunidade.

Interessado em saber mais sobre ScaleGrid?


Para saber mais sobre como o ScaleGrid Hosting for Redis™* pode ajudá-lo a gerenciar seus bancos de dados, confira nossa página ScaleGrid Service for Redis™. Veja como a hospedagem do ScaleGrid para Redis™ pode permitir que você se concentre mais no desenvolvimento de seu produto e menos no gerenciamento de bancos de dados.

*Redis é uma marca registrada da Redis Labs Ltd. Quaisquer direitos sobre ela são reservados à Redis Labs Ltd. Qualquer uso por ScaleGrid é apenas para fins referenciais e não indica qualquer patrocínio, endosso ou afiliação entre Redis e ScaleGrid.