O Memcached é um armazenamento de chave / valor na memória. O Redis pode ser usado dessa maneira, mas é muito mais.
Maneiras Memcached e Redis são semelhantes
Ambos são capazes de armazenar em cache os resultados do banco de dados ou qualquer outra coisa que você queira armazenar em cache.
Ambos são capazes de armazenar valores de string simples para uma chave. Uma resposta anterior declarada memcached é mais flexível, e isso é falso. Armazenar "o que você quiser" no memcached envolve pegar objetos e serializar / organizá-los em strings. Redis apóia isso igualmente bem. O Redis geralmente é mais flexível, mesmo quando você armazena seus objetos serializados, já que o tamanho padrão do valor máximo é muito maior (1MB vs 512MB).
Ambos armazenam valores na memória e são extremamente rápidos e eficientes, geralmente com detecção de garrafas na largura de banda da rede ou E / S de memória sem uso pesado da CPU. Ambos são altamente escalonáveis. Ótimas ferramentas para gerenciamento e monitoramento existem para ambos. Soluções de cluster comercial existem para ambos. A partir de 3.0, o redis inclui suporte a cluster integrado, que o memcached não oferece.
Praticamente todos os casos de uso do memcached podem ser resolvidos igualmente bem, às vezes melhor, pelos redis. O Memcached é um software fantástico, mas suas características e pontos strongs se tornaram um subconjunto do Redis.
O Redis Superset
Onde eles diferem é no grande número de recursos adicionais que o redis oferece, e os casos de uso adicionais que esses recursos permitem.
O Redis é mais que um armazenamento de chave / valor. É um servidor de estrutura de dados na memória. As chaves podem ser atribuídas a strings simples, como no memcached, mas também podem armazenar hashes, listas, conjuntos ou conjuntos classificados. Esses tipos de dados adicionais são eficientes e otimizados, com muitos comandos para aproveitá-los , permitindo que os padrões de acesso não sejam oferecidos por um armazenamento simples de chave / valor.
O Redis oferece persistência , incorporada e ativada por padrão. Isso significa que o redis é um banco de dados real por padrão, e não um cache volátil simples como o memcached. Seus dados estarão lá quando você reiniciar. Há muitas opções de administração simples que você pode usar para ajustar a persistência para melhor resolver seu caso de uso ou desativá-la se tudo o que você deseja é um cache volátil.
O Redis oferece pub / sub (Publicar / Assinar). Isso permite que você crie canais e tenha um ou mais clientes assinando-os, permitindo um mecanismo eficiente de comunicação em tempo real de alta velocidade. Isso pode ser uma ótima solução para comunicação entre processos, entre aplicativos ou entre servidores.
O Redis oferece suporte a script Lua . Isso permite que você faça todo tipo de coisas novas. Um exemplo importante seria a execução de vários comandos redis dependentes atomicamente e com uma única chamada para redis. O script Lua é fácil de aprender e os scripts são executados de forma eficiente e atomizada.
Conclusão
A menos que seu projeto já esteja usando o memcached ou sua organização tenha investimentos significativos no memcached, você não deve usá-lo. Redis rivaliza memcached em seu próprio jogo e permite um mundo inteiro de novos. Mesmo que seu problema possa ser resolvido igualmente por ambas as ferramentas, use a ferramenta que oferece mais flexibilidade para problemas que você ainda não pode prever: redis. Você também estará escolhendo a ferramenta que é mais ativamente desenvolvida e mantida, e que está sendo melhorada mais rapidamente. O Memcached não vai a lugar nenhum e não deveria, mas é difícil fazer com que ele seja usado em algo novo, a menos que você tenha conhecimento significativo ou investimentos em infraestrutura no memcached.
Se você já estiver usando o memcached, mudar para a redis pode ser muito trabalhoso para pouco ou nenhum ganho. Avalie os redis de perto e decida a sua situação se os custos de mudança superam os benefícios. Em caso afirmativo, fique com memcached. Ainda é um excelente software estável e robusto.