Estamos usando um aplicativo da web Ruby com servidor Redis para armazenamento em cache. Existe um ponto para testar o Memcached ?
O que nos dará um melhor desempenho? Quaisquer prós ou contras entre Redis e Memcached?
Pontos a considerar:
- Velocidade de leitura / gravação.
- Uso de memória.
- Despejo de E / S de disco.
- Dimensionamento.
caching
web-applications
memcached
redis
Sagiv Ofek
fonte
fonte
Respostas:
Resumo (TL; DR)
Atualizado 3 de junho de 2017
O Redis é mais poderoso, mais popular e com melhor suporte do que o memcached. O Memcached pode fazer apenas uma pequena fração do que os Redis podem fazer. Redis é melhor mesmo quando seus recursos se sobrepõem.
Para algo novo, use Redis.
Memcached vs Redis: Comparação Direta
Ambas as ferramentas são poderosas, rápidas, armazenamentos de dados na memória, úteis como cache. Ambos podem ajudar a acelerar seu aplicativo, armazenando em cache os resultados do banco de dados, fragmentos de HTML ou qualquer outra coisa que possa ser cara de gerar.
Pontos a considerar
Quando usado para a mesma coisa, eis como eles se comparam usando os "Pontos a considerar" da pergunta original:
memcached
Memcached é um servidor de cache volátil simples. Ele permite que você armazene pares de chave / valor em que o valor está limitado a ser uma string de até 1 MB.
É bom nisso, mas é tudo o que faz. Você pode acessar esses valores por sua chave em velocidade extremamente alta, saturando frequentemente a rede disponível ou mesmo a largura de banda da memória.
Quando você reinicia o memcached, seus dados desaparecem. Isso é bom para um cache. Você não deve guardar nada importante lá.
Se você precisar de alto desempenho ou alta disponibilidade, existem ferramentas, produtos e serviços de terceiros disponíveis.
redis
Os Redis podem fazer os mesmos trabalhos que o memcached, e podem fazê-los melhor.
Redis também podem atuar como cache . Também pode armazenar pares de chave / valor. Em redis, eles podem até ter 512 MB.
Você pode desativar a persistência e, felizmente, ele também perderá seus dados na reinicialização. Se você deseja que seu cache sobreviva, ele também será feito. De fato, esse é o padrão.
Também é super rápido, geralmente limitado pela largura de banda da rede ou da memória.
Se uma instância de redis / memcached não tiver desempenho suficiente para sua carga de trabalho, redis é a escolha certa. O Redis inclui suporte para cluster e vem com ferramentas de alta disponibilidade ( redis-sentinel ) diretamente "na caixa". Nos últimos anos, os redis também surgiram como líderes claros em ferramentas de terceiros. Empresas como Redis Labs, Amazon e outras oferecem muitas ferramentas e serviços redis úteis. O ecossistema ao redor dos redis é muito maior. O número de implantações em larga escala agora é provavelmente maior do que no memcached.
O Redis Superset
Redis é mais que um cache. É um servidor de estrutura de dados na memória. Abaixo, você encontrará uma visão geral rápida do que o Redis pode fazer além de ser um simples cache de chave / valor, como o memcached. A maioria dos recursos dos redis são coisas que o memcached não pode fazer.
Documentação
Redis é melhor documentado do que o memcached. Embora isso possa ser subjetivo, parece ser cada vez mais verdadeiro o tempo todo.
redis.io é um recurso fantástico e fácil de navegar. Ele permite que você tente redis no navegador e até oferece exemplos interativos ao vivo com cada comando nos documentos.
Agora, existem 2x mais resultados de fluxo de pilha para redis que memcached. 2x mais resultados do Google. Exemplos mais facilmente acessíveis em mais idiomas. Desenvolvimento mais ativo. Desenvolvimento de cliente mais ativo. Essas medidas podem não significar muito individualmente, mas em conjunto elas pintam uma imagem clara de que o suporte e a documentação para redis são maiores e muito mais atualizados.
Persistência
Por padrão, o redis persiste seus dados no disco usando um mecanismo chamado captura instantânea. Se você tiver RAM suficiente disponível, poderá gravar todos os seus dados em disco com quase nenhuma degradação no desempenho. É quase grátis!
No modo instantâneo, há uma chance de que uma falha repentina possa resultar em uma pequena quantidade de dados perdidos. Se você absolutamente precisar garantir que nenhum dado seja perdido, não se preocupe, o redis também estará lá com o modo AOF (Append Only File). Nesse modo de persistência, os dados podem ser sincronizados com o disco conforme são gravados. Isso pode reduzir o rendimento máximo da gravação para o quão rápido o disco pode gravar, mas ainda assim deve ser bastante rápido.
Existem muitas opções de configuração para ajustar a persistência, se necessário, mas os padrões são muito sensíveis. Essas opções facilitam a configuração do redis como um local seguro e redundante para armazenar dados. É um banco de dados real .
Muitos tipos de dados
O Memcached é limitado a strings, mas o Redis é um servidor de estrutura de dados que pode servir muitos tipos de dados diferentes. Ele também fornece os comandos necessários para aproveitar ao máximo esses tipos de dados.
Strings ( comandos )
Texto simples ou valores binários que podem ter até 512 MB de tamanho. Esse é o único tipo de dado redis e compartilhamento de cache de memcached, embora as strings de cache de memcached sejam limitadas a 1 MB.
O Redis oferece mais ferramentas para alavancar esse tipo de dados, oferecendo comandos para operações bit a bit, manipulação no nível de bit, suporte a incremento / decremento de ponto flutuante, consultas de intervalo e operações com várias teclas. Memcached não suporta nada disso.
Strings são úteis para todos os tipos de casos de uso, e é por isso que o memcached é bastante útil apenas com esse tipo de dados.
Hashes ( comandos )
Hashes são como um armazenamento de valores-chave dentro de um armazenamento de valores-chave. Eles mapeiam entre campos de string e valores de string. Os mapas de campo-> valor usando um hash são um pouco mais eficientes em espaço do que os mapas de chave-> valor usando seqüências regulares.
Hashes são úteis como um espaço para nome ou quando você deseja agrupar logicamente muitas chaves. Com um hash, você pode pegar todos os membros com eficiência, expirar todos os membros juntos, excluir todos os membros juntos, etc. Ótimo para qualquer caso de uso em que você tenha vários pares de chave / valor que precisam ser agrupados.
Um exemplo de uso de um hash é para armazenar perfis de usuário entre aplicativos. Um hash redis armazenado com o ID do usuário como a chave permitirá armazenar quantos bits de dados sobre um usuário forem necessários, mantendo-os armazenados em uma única chave. A vantagem de usar um hash em vez de serializar o perfil em uma sequência é que você pode ter aplicativos diferentes lendo / gravando campos diferentes no perfil do usuário sem ter que se preocupar com a substituição de um aplicativo pelas alterações feitas por outros (o que pode acontecer se você serializar obsoleto) dados).
Listas ( comandos )
As listas Redis são coleções ordenadas de strings. Eles são otimizados para inserir, ler ou remover valores da parte superior ou inferior (também conhecida como esquerda ou direita) da lista.
O Redis fornece muitos comandos para alavancar listas, incluindo comandos para empurrar / pop itens, push / pop entre listas, truncar listas, executar consultas de intervalo etc.
As listas criam ótimas filas atômicas e duráveis. Eles funcionam muito bem para filas de trabalhos, logs, buffers e muitos outros casos de uso.
Conjuntos ( comandos )
Conjuntos são coleções não ordenadas de valores exclusivos. Eles são otimizados para permitir que você verifique rapidamente se um valor está no conjunto, adicione / remova valores rapidamente e avalie a sobreposição com outros conjuntos.
Isso é ótimo para coisas como listas de controle de acesso, rastreadores de visitantes únicos e muitas outras coisas. A maioria das linguagens de programação tem algo semelhante (geralmente chamado de conjunto). É assim, apenas distribuído.
O Redis fornece vários comandos para gerenciar conjuntos. Óbvios como adicionar, remover e verificar o conjunto estão presentes. Assim, comandos menos óbvios, como abrir / ler um item aleatório e comandos para executar uniões e cruzamentos com outros conjuntos.
Conjuntos classificados ( comandos )
Conjuntos classificados também são coleções de valores exclusivos. Estes, como o nome indica, são ordenados. Eles são ordenados por uma pontuação e, em seguida, lexicograficamente.
Esse tipo de dados é otimizado para pesquisas rápidas por pontuação. Obter o maior, o menor ou qualquer intervalo de valores entre eles é extremamente rápido.
Se você adicionar usuários a um conjunto classificado, juntamente com a pontuação mais alta, terá um quadro de líderes perfeito. Quando novas pontuações mais altas chegarem, basta adicioná-las ao conjunto novamente com as pontuações mais altas e ele reordenará seu quadro de líderes. Também é excelente para acompanhar a última vez que os usuários visitaram e quem está ativo no seu aplicativo.
Armazenar valores com a mesma pontuação faz com que sejam ordenados lexicograficamente (pense em ordem alfabética). Isso pode ser útil para coisas como recursos de preenchimento automático.
Muitos dos comandos de conjunto classificados são semelhantes aos comandos de conjuntos, às vezes com um parâmetro de pontuação adicional. Também estão incluídos comandos para gerenciar pontuações e consultas por pontuação.
Geo
O Redis possui vários comandos para armazenar, recuperar e medir dados geográficos. Isso inclui consultas de raio e medição de distâncias entre pontos.
Tecnicamente, os dados geográficos em redis são armazenados em conjuntos classificados, portanto, esse não é um tipo de dados verdadeiramente separado. É mais uma extensão em cima de conjuntos classificados.
Bitmap e HyperLogLog
Como geográfico, esses não são tipos de dados completamente separados. Estes são comandos que permitem tratar dados de sequência como se fosse um bitmap ou um hiperloglog.
Os bitmaps são para o que servem os operadores de nível de bit mencionados abaixo
Strings
. Esse tipo de dado foi o alicerce básico do recente projeto de arte colaborativa do reddit: r / Place .O HyperLogLog permite que você use uma quantidade extremamente pequena constante de espaço para contar valores únicos quase ilimitados com precisão chocante. Usando apenas ~ 16 KB, você pode contar com eficiência o número de visitantes únicos do seu site, mesmo que esse número esteja na casa dos milhões.
Transações e Atomicidade
Os comandos no redis são atômicos, o que significa que, assim que você escreve um valor no redis, esse valor fica visível para todos os clientes conectados ao redis. Não há espera para esse valor se propagar. Tecnicamente, o memcached também é atômico, mas com o redis adicionando toda essa funcionalidade além do memcached, vale a pena notar e de certa forma impressionante que todos esses tipos de dados e recursos adicionais também sejam atômicos.
Embora não seja exatamente o mesmo que transações em bancos de dados relacionais, o redis também possui transações que usam "bloqueio otimista" ( WATCH / MULTI / EXEC ).
Pipelining
O Redis fornece um recurso chamado ' pipelining '. Se você tiver muitos comandos redis que deseja executar, poderá usar o pipelining para enviá-los para o redis todos de uma vez, em vez de um de cada vez.
Normalmente, quando você executa um comando para redis ou memcached, cada comando é um ciclo de solicitação / resposta separado. Com o pipelining, os redis podem armazenar em buffer vários comandos e executá-los todos de uma vez, respondendo com todas as respostas a todos os seus comandos em uma única resposta.
Isso pode permitir uma taxa de transferência ainda maior na importação em massa ou em outras ações que envolvem muitos comandos.
Pub / Sub
O Redis possui comandos dedicados à funcionalidade pub / sub , permitindo que o redis atue como um transmissor de mensagens de alta velocidade. Isso permite que um único cliente publique mensagens para muitos outros clientes conectados a um canal.
Redis faz pub / sub, bem como quase qualquer ferramenta. Os agentes de mensagens dedicados, como o RabbitMQ, podem ter vantagens em determinadas áreas, mas, como o mesmo servidor também pode oferecer filas duráveis e persistentes e outras estruturas de dados de que as cargas de trabalho de pub / sub provavelmente precisam, o Redis geralmente se mostra a melhor e mais simples ferramenta para o trabalho.
Script de Lua
Você pode pensar em scripts lua como o próprio SQL do redis ou procedimentos armazenados. É mais e menos que isso, mas a analogia funciona principalmente.
Talvez você tenha cálculos complexos que deseja que os redis realizem. Talvez você não possa se dar ao luxo de reverter suas transações e precisar de garantias de que todas as etapas de um processo complexo ocorrerão atomicamente. Esses problemas e muitos mais podem ser resolvidos com o script lua.
O script inteiro é executado atomicamente; portanto, se você pode ajustar sua lógica em um script lua, geralmente evita mexer com transações de bloqueio otimistas.
Dimensionamento
Como mencionado acima, o redis inclui suporte interno para cluster e é fornecido com sua própria ferramenta de alta disponibilidade chamada
redis-sentinel
.Conclusão
Sem hesitação, eu recomendaria o remarcação sobre o memcached para novos projetos ou projetos existentes que ainda não usam o memcached.
O exemplo acima pode parecer que eu não gosto do memcached. Pelo contrário: é uma ferramenta poderosa, simples, estável, madura e reforçada. Existem até alguns casos de uso em que é um pouco mais rápido que o redis. Eu amo memcached. Só acho que não faz muito sentido para o desenvolvimento futuro.
O Redis faz tudo que o memcached faz, geralmente melhor. Qualquer vantagem de desempenho para o memcached é pequena e específica da carga de trabalho. Também existem cargas de trabalho para as quais os redis serão mais rápidos, e muitas mais cargas de trabalho que os redis podem fazer e quais os memcached simplesmente não podem. As pequenas diferenças de desempenho parecem mínimas diante do gigantesco abismo de funcionalidade e o fato de que as duas ferramentas são tão rápidas e eficientes que podem muito bem ser a última parte da sua infraestrutura que você precisará se preocupar com o dimensionamento.
Há apenas um cenário em que o memcached faz mais sentido: onde o memcached já está sendo usado como cache. Se você já está armazenando em cache o memcached, continue usando-o, se ele atender às suas necessidades. Provavelmente, não vale a pena o esforço de mudar para redis e, se você usar redis apenas para armazenar em cache, pode não oferecer benefícios suficientes para valer o seu tempo. Se o memcached não estiver atendendo às suas necessidades, provavelmente você deve mudar para redis. Isso é verdade se você precisa ir além do memcached ou se precisa de funcionalidade adicional.
fonte
Use Redis se
Você precisa excluir / expirar seletivamente itens no cache. (Você precisa disso)
Você precisa da capacidade de consultar chaves de um tipo específico. eq. 'blog1: posts: *', 'blog2: categorias: xyz: posts: *'. Oh sim! isto é muito importante. Use isso para invalidar seletivamente certos tipos de itens em cache. Você também pode usar isso para invalidar o cache de fragmentos, o cache de páginas, apenas os objetos AR de um determinado tipo, etc.
Persistência (você também precisará disso, a menos que esteja bem com o cache que precisa ser aquecido após cada reinicialização. Muito essencial para objetos que raramente mudam)
Use memcached se
Pela minha experiência, tive uma estabilidade muito melhor com Redis do que com Memcached
fonte
Memcached é multithread e rápido.
O Redis possui muitos recursos e é muito rápido, mas completamente limitado a um núcleo, pois é baseado em um loop de eventos.
Nós usamos os dois. O Memcached é usado para armazenar objetos em cache, reduzindo principalmente a carga de leitura nos bancos de dados. O Redis é usado para coisas como conjuntos ordenados, úteis para acumular dados de séries temporais.
fonte
Isso é muito longo para ser postado como um comentário na resposta já aceita, então eu o coloquei como uma resposta separada
Uma coisa a considerar também é se você espera ter um limite de memória superior na sua instância de cache.
Como o redis é um banco de dados nosql com muitos recursos e o cache é apenas uma opção para a qual ele pode ser usado, ele aloca memória conforme necessário - quanto mais objetos você colocar nele, mais memória ele usará. A
maxmemory
opção não impõe estritamente o uso do limite de memória superior. Conforme você trabalha com o cache, as chaves são despejadas e expiradas; é provável que suas chaves não tenham o mesmo tamanho, portanto ocorre a fragmentação da memória interna.Por padrão, o redis usa o alocador de memória jemalloc , que faz o possível para ser compacto e rápido, mas é um alocador de memória de uso geral e não pode acompanhar muitas alocações e purgas de objetos ocorrendo a uma taxa alta. Por esse motivo, em alguns padrões de carga, o processo redis aparentemente pode vazar memória devido à fragmentação interna. Por exemplo, se você possui um servidor com 7 Gb de RAM e deseja usar redis como cache LRU não persistente, poderá descobrir que o processo de redis com 5 Gb
maxmemory
ao longo do tempo usaria mais e mais memória, atingindo eventualmente o limite total de RAM até O assassino sem memória interfere.O memcached é mais adequado ao cenário descrito acima, pois gerencia sua memória de uma maneira completamente diferente. O memcached aloca um grande pedaço de memória - tudo o que será necessário - e depois gerencia essa memória por si só, usando seu próprio alocador de laje implementado . Além disso, o memcached tenta manter a fragmentação interna baixa, pois na verdade usa o algoritmo LRU por laje , quando as remoções de LRU são feitas com o tamanho do objeto considerado.
Com isso dito, o memcached ainda tem uma posição forte em ambientes, onde o uso da memória deve ser imposto e / ou previsível. Tentamos usar os redis estáveis mais recentes (2.8.19) como uma substituição de cache de memórias não persistente baseada em LRU, em uma carga de trabalho de 10 a 15k op / s, e vazou muito a memória; a mesma carga de trabalho estava travando as instâncias do ElastiCache da Amazon em um dia ou mais por causa dos mesmos motivos.
fonte
maxmemory
opção @StefanNch redis ' não considera a fragmentação da memória interna. Consulte o meu comentário acima para obter detalhes - os problemas que descrevi foram vistos no cenário descrito na página "Redis como um cache LRU" com as opções de limitação de memória ativadas. O memcached, por outro lado, usa uma abordagem diferente para evitar problemas de fragmentação da memória; portanto, seu limite de memória é muito mais "rígido".Memcached é bom em ser um simples armazenamento de chave / valor e é bom em fazer key => STRING. Isso o torna realmente bom para o armazenamento da sessão.
Redis é bom em fazer a chave => SOME_OBJECT.
Realmente depende do que você vai colocar lá. Meu entendimento é que, em termos de desempenho, eles são bem uniformes.
Também boa sorte em encontrar pontos de referência objetivos, se você encontrar algum gentilmente envie-os em meu caminho.
fonte
Se você não se importa com um estilo de escrita grosseiro, Redis vs Memcached no blog Systoilet vale a pena ser lido do ponto de vista da usabilidade, mas não deixe de ler os comentários nos comentários antes de tirar conclusões sobre o desempenho; existem alguns problemas metodológicos (testes de ciclo ocupado de thread único) e o Redis fez algumas melhorias desde que o artigo foi escrito também.
E nenhum link de benchmark está completo sem confundir um pouco as coisas, portanto, verifique também alguns benchmarks conflitantes no LiveJournal de Dormondo e no Antirez Weblog .
Editar - como salienta Antirez, a análise de Systoilet é bastante mal concebida. Mesmo além do déficit de thread único, grande parte da disparidade de desempenho nesses benchmarks pode ser atribuída às bibliotecas do cliente, em vez da taxa de transferência do servidor. Os benchmarks no Antirez Weblog apresentam, de fato, uma comparação muito maior entre as maçãs (com a mesma boca).
fonte
Eu tive a oportunidade de usar o memcached e o redis juntos no proxy de cache em que trabalhei, deixe-me compartilhar onde exatamente usei o que e o motivo por trás do mesmo ....
Redis>
1) Usado para indexar o conteúdo do cache, no cluster. Eu tenho mais de um bilhão de chaves espalhadas por clusters de redis, o tempo de resposta dos redis é bem menor e estável.
2) Basicamente, é um armazenamento de chave / valor, portanto, onde quer que você tenha algo semelhante em seu aplicativo, pode-se usar o redis com muito esforço.
3) Redis persistência, failover e backup (AOF) facilitarão seu trabalho.
Memcache>
1) sim, uma memória otimizada que pode ser usada como cache. Usei-o para armazenar o conteúdo do cache sendo acessado com muita frequência (com 50 ocorrências / segundo) com tamanho menor que 1 MB.
2) Aloquei apenas 2 GB de 16 GB para o memcached também quando meu tamanho de conteúdo único era> 1 MB.
3) À medida que o conteúdo cresce próximo aos limites, ocasionalmente observei tempos de resposta mais altos nas estatísticas (não no caso de redis).
Se você pedir uma experiência geral, o Redis é muito verde, pois é fácil de configurar, muito flexível com recursos robustos estáveis.
Além disso, há um resultado de benchmarking disponível neste link . Abaixo estão alguns destaques,
Espero que isto ajude!!
fonte
Teste. Execute alguns benchmarks simples. Por um longo tempo, eu me considerava um rinoceronte da velha escola, pois usava principalmente o memcached e considerava o Redis o novo garoto.
Com minha empresa atual, o Redis foi usado como o cache principal. Quando analisei algumas estatísticas de desempenho e simplesmente comecei a testar, o Redis era, em termos de desempenho, comparável ou minimamente mais lento que o MySQL.
Memcached, embora simplista, expulsou totalmente os Redis da água . Escalou muito melhor:
Além disso, na minha opinião, a política de despejo de memcached é muito melhor implementada, resultando em um tempo médio de resposta geral mais estável ao lidar com mais dados do que o cache pode suportar.
Alguns testes de desempenho revelaram que o Redis, no nosso caso, tem um desempenho muito ruim. Isso, acredito, tem a ver com muitas variáveis:
Pessoalmente, não compartilho a visão que os autores do Redis têm sobre simultaneidade e multithreading.
fonte
Outro bônus é que pode ficar muito claro como o memcache se comportará em um cenário de armazenamento em cache, enquanto o redis geralmente é usado como um armazenamento de dados persistente, embora possa ser configurado para se comportar exatamente como o memcached, também conhecido como despejo de itens menos usados recentemente, quando atingir o máximo capacidade.
Alguns aplicativos em que trabalhei usam os dois apenas para deixar claro como pretendemos que os dados se comportem - coisas no memcache, escrevemos código para lidar com os casos em que não estão lá - coisas em redis, contamos com a presença deles .
Fora isso, o Redis geralmente é considerado superior, pois a maioria dos casos de uso é mais rica em recursos e, portanto, flexível.
fonte
Não seria errado se dissermos que redis é uma combinação de (cache + estrutura de dados) enquanto o memcached é apenas um cache.
fonte
Um teste muito simples para definir e obter 100k chaves e valores exclusivos contra o redis-2.2.2 e o memcached. Ambos estão sendo executados em linux VM (CentOS) e o código do meu cliente (colado abaixo) é executado na área de trabalho do Windows.
Redis
O tempo necessário para armazenar 100000 valores é = 18954ms
O tempo necessário para carregar 100000 valores é = 18328ms
Memcached
O tempo necessário para armazenar 100000 valores é = 797ms
O tempo necessário para recuperar 100000 valores é = 38984ms
fonte
Uma grande diferença que não foi apontada aqui é que o Memcache sempre possui um limite superior de memória, enquanto o Redis não possui por padrão (mas pode ser configurado para). Se você sempre deseja armazenar uma chave / valor por um determinado período de tempo (e nunca despejá-la devido à pouca memória), deseja usar o Redis. Claro, você também corre o risco de ficar sem memória ...
fonte
O maior motivo restante é a especialização.
Os Redis podem fazer muitas coisas diferentes, e um efeito colateral disso é que os desenvolvedores podem começar a usar muitos desses conjuntos de recursos diferentes na mesma instância. Se você estiver usando o recurso LRU do Redis para um cache ao lado do armazenamento de dados físicos que NÃO é LRU, é totalmente possível ficar sem memória.
Se você estiver configurando uma instância Redis dedicada para ser usada SOMENTE como uma instância LRU para evitar esse cenário específico, não há realmente nenhum motivo atraente para usar Redis sobre Memcached.
Se você precisar de um cache LRU confiável "nunca desce" ... O Memcached se ajustará à conta, pois é impossível ficar sem memória por design e a funcionalidade especializada impede que os desenvolvedores tentem torná-lo algo que possa ameaçar isso. Separação simples de preocupações.
fonte
O Memcached será mais rápido se você estiver interessado em desempenho, mesmo porque o Redis envolve redes (chamadas TCP). Também internamente o Memcache é mais rápido.
O Redis possui mais recursos, como foi mencionado por outras respostas.
fonte
Pensamos em Redis como uma decolagem de carga para o nosso projeto no trabalho. Pensamos que, usando um módulo
nginx
chamadoHttpRedis2Module
ou algo semelhante, teríamos uma velocidade incrível, mas ao testar com o teste AB, estamos errados.Talvez o módulo estivesse ruim ou nosso layout, mas era uma tarefa muito simples e era ainda mais rápido coletar dados com php e depois inseri-los no MongoDB. Estamos usando a APC como sistema de cache e com esse php e MongoDB. Foi muito mais rápido que o
nginx
módulo Redis.Minha dica é testá-lo você mesmo, mostrando os resultados para o seu ambiente. Decidimos que o uso de Redis era desnecessário em nosso projeto, pois não faria sentido.
fonte
Redis é melhor.
Os profissionais de
Redis
são,LUA
Suporte para Procedimento Armazenado ( script)Considerando que
Memcache
é um sistema de tipo de cache de valor da chave na memória.fonte
Bem, eu usei principalmente os meus aplicativos, o Memcache para armazenar em cache as sessões e o redis para objetos de doutrina / orm query. Em termos de desempenho, ambos são quase iguais.
fonte
Aqui está o realmente ótimo artigo / diferenças fornecidas pela Amazon
Redis é um vencedor claro em comparação com o memcached.
Apenas um ponto positivo para o Memcached É multithread e rápido. O Redis possui muitos recursos excelentes e é muito rápido, mas limitado a um núcleo.
Ótimos pontos sobre Redis, que não são suportados no Memcached
fonte