Memcached vs. Redis?

estamos a usar um aplicativo de Ruby web comRedis servidor para cache. Existe um ponto para testar Memcached em vez disso?

O que nos dará um melhor desempenho? Algum prós ou contras entre o Redis e o Memcached?

Pontos a considerar:

  • velocidade de leitura / escrita.
  • USO Da Memória.
  • Disco I/O despejo.
  • Escala.
Author: Zeeshan Ali, 2012-05-12

17 answers

Resumo (TL; DR)

Actualizado a 3 de junho, 2017

O Redis é mais poderoso, mais popular e mais apoiado do que o memcached. Memcached só pode fazer uma pequena fração das coisas que Redis pode fazer. Redis é melhor mesmo onde suas características se sobrepõem. Para qualquer coisa nova, use Redis.

Memcached vs Redis: comparação directa

Ambas as ferramentas são poderosas, rápidas, armazenamento de dados em memória que são úteis como um cache. Ambos podem ajudar a acelerar a sua aplicação por cache de resultados de banco de dados, fragmentos HTML, ou qualquer outra coisa que possa ser caro para gerar.

Pontos a considerar

Quando usado para a mesma coisa, aqui está como eles se comparam usando os "pontos a considerar" da pergunta original:

  • Velocidade de leitura/escrita : ambos são extremamente rápidos. Benchmarks variam por carga de trabalho, versões e muitos outros fatores, mas geralmente mostram que o redis é tão rápido ou quase tão rápido quanto o memcached. Eu recomendo redis, mas não porque memcached é lento. Não é.
  • uso da memória : Redis é melhor.
    • memcached: você indica o tamanho da 'cache' e à medida que introduz os itens, o servidor cresce rapidamente para um pouco mais do que este tamanho. Nunca há realmente uma maneira de recuperar qualquer desse espaço, a não ser reiniciar memcached. Todas as suas chaves poderiam estar expiradas, você poderia limpar a base de dados, e ele ainda usaria o pedaço inteiro de RAM que você configurou com.
    • redis: definir um tamanho máximo depende de ti. Redis nunca irá usar mais do que tem de usar e irá devolver-lhe a memória que já não está a usar.
    • eu armazenei 100,000 ~2kb strings (~200MB) de sentenças aleatórias em ambos. O uso de RAM Memcached cresceu para ~225MB. O uso do Redis RAM cresceu para ~228MB. Depois de limpar ambos, redis caiu para ~29MB e memcached ficou em ~225MB. Eles são igualmente eficientes na forma como armazenam dados, mas apenas um é capaz de recuperá-los.
  • Disco I / O despejo : uma vitória clara para a redis desde que faz isso por padrão e tem persistência muito configurável. O Memcached não tem mecanismos para despejar para o disco sem ferramentas de terceiros.
  • escalar : ambos dão-lhe toneladas de margem de cabeça antes de precisar de mais do que uma única instância como um cache. O Redis inclui ferramentas para ajudá-lo a ir além disso, enquanto o memcached não o faz.

Memcached

O Memcached é um simples servidor de cache Volátil. Ele permite que você armazene pares de chaves / valores onde o valor é limitado a ser uma string up para 1MB.

É bom nisto, mas é só isso que faz. Você pode acessar esses valores por sua chave em velocidade extremamente alta, muitas vezes saturando a rede disponível ou até mesmo largura de banda de memória. Quando reiniciar o memcached, os seus dados desaparecem. Isto é bom para um esconderijo. Não devias guardar lá nada importante.

Se você precisa de alto desempenho ou alta disponibilidade, existem ferramentas, produtos e serviços de terceiros disponíveis.

Redis

O Redis pode fazer os mesmos trabalhos. como memcached pode, e pode fazer melhor.

Redis can act as a cache as well. Ele pode armazenar pares chave / valor também. Em redis eles podem até ser até 512MB.

Você pode desligar a persistência e ele vai alegremente perder os seus dados no reinício também. Se queres que o teu tesouro sobreviva ao recomeço, também te deixa fazer isso. Na verdade, esse é o padrão.

É super rápido demais, muitas vezes limitado pela largura de banda da rede ou memória.

Se uma instância de redis / memcached não for desempenho suficiente para a sua carga de trabalho, redis é a escolha clara. Redis inclui suporte de cluster e vem com ferramentas de alta disponibilidade (redis-sentinel) à direita "na caixa". Nos últimos anos, a redis também emergiu como líder claro em ferramentas de terceiros. Empresas como Redis Labs, Amazon, e outras oferecem muitas ferramentas e serviços úteis redis. O ecossistema em torno de redis é muito maior. O número de destacamentos em grande escala é agora provavelmente maior do que para um recurso fantástico e fácil de navegar. Ele permite que você tente redis no navegador e até lhe dá exemplos interativos ao vivo com cada comando no docs.

Existem agora 2x tantos resultados de stackoverflow para redis como memcached. 2x tantos resultados do Google. Exemplos mais facilmente acessíveis em mais línguas. Desenvolvimento mais ativo. Desenvolvimento de clientes mais ativo. Estas medidas podem não significar muito individualmente, mas em combinação eles pintam um quadro claro que suporta e a documentação para o redis é maior e muito mais atualizada.

Persistência

Por omissão, o redis persiste os seus dados no disco usando um mecanismo chamado snapshotting. Se você tem RAM suficiente disponível é capaz de escrever todos os seus dados para o disco com quase nenhuma degradação de desempenho. Está quase livre!

No modo instantâneo, há uma hipótese de que um estoiro repentino possa resultar numa pequena quantidade de dados perdidos. Se você absolutamente precisa se certificar de que nenhum dado é perdido, não se preocupe, o redis também tem as suas costas com o modo AOF (Apend Only File). Neste modo de persistência os dados podem ser sincronizados ao disco como ele é escrito. Isso pode reduzir o rendimento máximo de escrita para o quanto rápido o seu disco pode escrever, mas ainda deve ser bastante rápido.

Existem muitas opções de configuração para afinar a persistência se você precisar, mas os valores por omissão são muito sensíveis. Estas opções tornam mais fácil configurar o redis como um lugar seguro e redundante para armazenar dados. É um real banco.

Muitos Tipos De Dados

O Memcached está limitado a cadeias de caracteres, mas o Redis é um servidor de estrutura de dados que pode servir muitos tipos de dados diferentes. Ele também fornece os comandos que você precisa para aproveitar ao máximo esses tipos de dados.

Cadeias de caracteres (comandos)

Texto simples ou valores binários que podem ter até 512MB de tamanho. Este é o único tipo de dados redis e memcached share, embora as cadeias de memcached estão limitadas a 1MB.

O Redis dá-lhe mais ferramentas. para alavancar este tipo de dados, oferecendo comandos para operações bitwise, manipulação de nível de bits, suporte de incremento/decrement de vírgula flutuante, consultas de gama e operações multi-chaves. O Memcached não suporta nada disso.

As Cadeias de caracteres são úteis para todos os tipos de casos de uso, e é por isso que o memcached é bastante útil apenas com este tipo de dados.

Comandos

Hashes ()

Os traços são como uma loja de valores chave dentro de uma loja de valores-chave. Eles mapeiam entre texto campos e valores de cadeia de caracteres. Campo - >mapas de valores usando um hash são um pouco mais eficientes do que mapas chave - >valor usando strings regulares.

Os traços são úteis como um espaço de nomes, ou quando você quer agrupar logicamente muitas teclas. Com um hash você pode pegar todos os membros eficientemente, expirar todos os membros juntos, excluir todos os membros juntos, etc. Ótimo para qualquer caso de uso onde você tem vários pares chave/valor que precisam agrupar.

Um exemplo de utilização de um hash é para armazenar o utilizador perfis entre aplicações. Um hash redis armazenado com o ID do usuário como chave lhe permitirá armazenar tantos bits de dados sobre um usuário quanto necessário, mantendo-os armazenados sob uma única chave. A vantagem de usar um hash em vez de serializar o perfil em uma string é que você pode ter diferentes aplicações ler / escrever campos diferentes dentro do perfil do usuário sem ter que se preocupar com uma aplicação sobrepondo as alterações feitas por outros (o que pode acontecer se você serializar o stale dado).

Listas (comandos)

As listas Redis são colecções ordenadas de cadeias de caracteres. Eles são otimizados para inserir, ler ou remover valores do topo ou do fundo (aka: esquerda ou direita) da lista.

O Redis oferece muitos comandos {[[130]}para alavancar listas, incluindo comandos para empurrar / pop itens, empurrar/pop entre listas, listas truncadas, realizar consultas de gama, etc.

As listas fazem grandes filas duráveis, atómicas. Estes funcionam muito bem para filas de trabalho, logs, buffers, e muitos outros casos de uso.

Conjuntos (comandos)

Os conjuntos são colecções não ordenadas de valores únicos. Eles são otimizados para permitir que você verifique rapidamente se um valor está no conjunto, rapidamente adicionar/remover valores, e para medir a sobreposição com outros conjuntos.

Estes são ótimos para coisas como listas de controle de acesso, rastreadores únicos de visitantes, e muitas outras coisas. A maioria das linguagens de programação tem algo similar (geralmente chamado de Conjunto). Isto é assim, só que ... descentralizar.

O Redis fornece vários comandos para Gerir Conjuntos. Os óbvios como Adicionar, Remover e verificar o conjunto estão presentes. Assim são comandos menos óbvios como popping/reading um item aleatório e comandos para realizar uniões e intersecções com outros conjuntos.

Conjuntos ordenados (comandos)

Os conjuntos ordenados são também colecções de valores únicos. Estes, como o nome indica, são ordenados. Eles são ordenados por uma pontuação, então lexicograficamente.

Este tipo de dados é optimizado para pesquisas rápidas por Pontuação. Obter o mais alto, o mais baixo, ou qualquer Gama de valores no meio é extremamente rápido.

Se adicionar utilizadores a um conjunto ordenado, juntamente com a sua pontuação máxima, terá um quadro de líderes perfeito. À medida que novas pontuações chegam, basta adicioná-las ao set novamente com a sua pontuação alta e ele vai re-ordenar o seu quadro de líderes. Também é ótimo para manter o controle dos usuários visitados pela última vez e quem está ativo em seu aplicacao.

Armazenar valores com a mesma pontuação faz com que sejam ordenados lexicograficamente (pensar alfabeticamente). Isto pode ser útil para coisas como recursos Auto-completos.

Muitos dos comandos do conjunto ordenado são semelhantes aos comandos dos conjuntos, por vezes com um parâmetro de pontuação adicional. Também estão incluídos os comandos para gerenciar pontuações e questionar por Pontuação.

Geo

O Redis tem vários comandos para armazenar, recuperar e medição de dados geográficos. Isto inclui consultas por raio e medição de distâncias entre pontos.

Tecnicamente os dados geográficos em redis são armazenados dentro de conjuntos ordenados, por isso este não é um tipo de dados verdadeiramente separado. É mais uma extensão em cima de conjuntos ordenados.

Bitmap e Hiperloglobg

Como o geo, estes não são tipos de dados completamente separados. Estes são comandos que lhe permitem tratar dados de string como se fosse um bitmap ou uma hiperloglobg.

Bitmaps são o que os operadores de nível bit que referenciei em Strings são para. Este tipo de dados foi o alicerce básico para o recente projeto de arte colaborativa do reddit: R / Place .

Hiperloglobg permite-lhe usar uma quantidade de espaço extremamente pequena e constante para contar valores únicos quase ilimitados com uma precisão chocante. Usando apenas ~16KB você poderia eficientemente contar o número de visitantes únicos para o seu site, mesmo se esse número está nos milhões.

Transacções e Atomicidade

Os comandos do redis são atómicos, o que significa que pode ter a certeza que assim que escrever um valor para o redis esse valor é visível para todos os clientes ligados ao redis. Não há como esperar que esse valor se propague. Tecnicamente memcached também é atômico, mas com redis adicionando toda essa funcionalidade além do memcached, vale a pena notar e um pouco impressionante que todos esses tipos de dados adicionais e recursos também são atômicos.

Embora não seja exactamente o mesmo que as transacções em bases de dados relacionais, a redis também tem transacções que usam " bloqueio optimista "(relógio/MULTI/EXEC ).

Pipelining

O Redis apresenta uma característica chamada 'pipelining '. Se tiver muitos comandos redis que deseja executar, poderá usar o pipelining para os Enviar para o redis all-at-once em vez de one-at-time.

Normalmente, quando executa um comando quer para o redis quer para o memcached, cada comando é um comando separado ciclo de pedido / resposta. Com pipelining, redis pode 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.

Isto pode permitir-lhe obter um rendimento ainda maior na importação a granel ou noutras acções que envolvam muitos comandos.

Pub / Sub

O Redis tem comandos dedicados à função pub / sub , permitindo que o redis actue como um emissor de mensagens de alta velocidade. Presente permite a um único cliente publicar mensagens para muitos outros clientes ligados a um canal.

O Redis faz pub / sub, bem como quase todas as ferramentas. Corretores de mensagens dedicados como RabbitMQ podem ter vantagens em certas áreas, mas o facto de que o mesmo servidor também pode dar-lhe filas duradouras persistentes e outras estruturas de dados que as suas cargas de trabalho pub/sub provavelmente precisam, o Redis irá muitas vezes provar ser a melhor e mais simples ferramenta para o trabalho.

Lua Scripting

Você pode tipo de pensar em guiões lua como o próprio SQL da redis ou procedimentos armazenados. É mais e menos do que isso, mas a analogia funciona principalmente.

Talvez tenhas cálculos complexos que queres que a redis Faça. Talvez você não pode dar ao luxo de ter suas transações rolar para trás e precisa de garantias cada passo de um processo complexo vai acontecer atomicamente. Estes problemas e muitos mais podem ser resolvidos com lua scripting.

Todo o script é executado atomicamente, por isso se você pode caber o seu lógica em um script lua você pode muitas vezes evitar mexer com transações de bloqueio otimista.

Escala

Como mencionado acima, o redis inclui o Suporte de agrupamento e é empacotado com a sua própria ferramenta de alta disponibilidade chamada redis-sentinel.

Conclusão

Sem hesitação, eu recomendaria redis sobre memcached para quaisquer novos projetos, ou projetos existentes que já não usam memcached.

O acima pode parecer que não gosto de memcached. Pelo contrário.: é uma ferramenta poderosa, simples, estável, madura e endurecida. Há até casos de uso em que é um pouco mais rápido que o redis. Adoro memcached. Acho que não faz muito sentido para o desenvolvimento futuro. O Redis faz tudo o que o memcached faz, muitas vezes melhor. Qualquer vantagem de desempenho para o memcached é menor e específica em termos de carga de trabalho. Há também cargas de trabalho para as quais o redis será mais rápido, e muito mais cargas de trabalho que o redis pode fazer o que o memcached simplesmente não pode. as diferenças parecem menores em face do Golfo gigante em funcionalidade e o fato de que ambas as ferramentas são tão rápidas e eficientes que podem muito bem ser a última peça de sua infra-estrutura que você sempre terá que se preocupar com a escala.

Só há um cenário onde o memcached faz mais sentido: onde o memcached já está em uso como cache. Se você já está cache com o memcached, então continue usando-o, se ele atender às suas necessidades. É provável que não vale a pena o esforço para se mudar para redis e se você está indo para usar redis apenas para caching ele pode não oferecer benefício suficiente para valer o seu tempo. Se o memcached não está a satisfazer as tuas necessidades, então devias mudar-te para o redis. Isto é verdade se você precisa escalar além do memcached ou se você precisa de funcionalidade adicional.

 1684
Author: Carl Zulauf, 2017-06-03 07:08:16

Utilizar Redis if

  1. Necessita de apagar/expirar selectivamente os itens na 'cache'. (Você precisa disso))

  2. Você precisa da capacidade de consultar chaves de um determinado tipo. eq. 'blog1: posts:*', ' blog2: categories: xyz: posts:*'. sim! isto é muito importante. Use isso para invalidar determinados tipos de itens em cache seletivamente. Você também pode usar isso para invalidar cache de fragmentos, cache de páginas, apenas objetos AR de um determinado tipo, etc.

  3. Persistência ( vai precisar disso também, a menos que você está bem com o seu cache ter que aquecer após cada reinício. Muito essencial para objetos que raramente mudam)

Utilize o memcached se

  1. Memcached dá-te a cabeça!
  2. umm... agrupamento? meh. se vais tão longe, usa verniz e Redis para recolher fragmentos e objectos AR.
Pela minha experiência, tive uma estabilidade muito melhor com a Redis do que com o Memcached.
 128
Author: SMathew, 2012-07-05 06:04:10

Memcached é multithreaded e rápido.

Redis tem muitas características e é muito rápido, mas completamente limitado a um núcleo, uma vez que é baseado em um ciclo de eventos.

Usamos ambos. Memcached é usado para objetos de cache, principalmente reduzindo a carga de leitura nas bases de dados. O Redis é usado para coisas como conjuntos ordenados que são úteis para a compilação de dados de séries cronológicas.
 79
Author: W. Andrew Loe III, 2013-05-03 16:41:30

Isso é muito tempo para ser postado como um comentário para a resposta já Aceita, então eu colocá-lo como uma resposta separada

Uma coisa a considerar também é se você espera ter um limite de memória superior hard em sua instância de cache.

Uma vez que o redis é um banco de dados nosql com toneladas de recursos e o caching é apenas uma opção para a qual ele pode ser usado, ele aloca a memória como ele precisa - quanto mais objetos você coloca nele, mais memória ele usa. A opção maxmemory não impõe rigorosamente nada. utilização do limite de memória superior. À medida que você trabalha com cache, as chaves são despejadas e expiradas; as chances são que suas chaves não são todas do mesmo tamanho, então a fragmentação da memória interna ocorre.

Por padrão redis usa jemalloc alocador de memória, que tenta o seu melhor para ser tanto memória-compacta e rápida, mas é um alocador de memória de propósito geral e não pode acompanhar com lotes de alocações e purga de objetos ocorrendo a uma taxa elevada. Por causa disso, em alguns padrões de carga processo redis pode aparentemente, a memória vaza por causa da fragmentação interna. Por exemplo, se tiver um servidor com 7 Gb RAM e quiser usar o redis como cache LRU não persistente, poderá descobrir que o processo redis com maxmemory definido como 5Gb ao longo do tempo iria usar mais e mais memória, eventualmente atingindo o limite total de RAM até que o assassino fora-de-memória interfira.

[[3]}Memcached é um melhor ajuste ao cenário descrito acima, uma vez que gerencia sua memória de uma forma completamente diferente. o memcached atribui um grande pedaço de memória - tudo o que alguma vez necessitará - e depois gerencia esta memória por si só, usando a sua própria alocadora de slab implementada . Além disso, o memcached tenta manter a fragmentação interna baixa, pois na verdade usa o algoritmo LRU por-slab, quando as expulsões da 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 tem de ser imposto e/ou previsível. Tentamos usar os últimos redis estáveis (2.8.19) como um drop-in não-persistente baseado em LRU memcached substituição na carga de trabalho de 10-15k op/s, e vazou memória muito; a mesma carga de trabalho foi bater as instâncias ElastiCache Amazon em um dia ou mais por causa das mesmas razões.

 70
Author: artyom, 2015-03-02 11:22:00

O Memcached é bom em ser uma simples Loja de chaves / valores e é bom em fazer chave => STRING. Isso faz com que seja muito bom para o armazenamento de sessão.

O Redis é bom a fazer a tecla = > SOME_OBJECT.

Depende do que vais pôr lá dentro. Pelo que sei, em termos de desempenho, estão muito quites. Também boa sorte para encontrar pontos de referência objectivos, se encontrares alguns, envia-os para mim.
 45
Author: Erik Petersen, 2012-05-11 23:32:37

, Se você não mente uma tosca estilo de escrita, Redis vs Memcached no Systoilet blog, vale a pena ler a partir de um ponto de vista de usabilidade, mas certifique-se de ler o back & forth nos comentários antes de tirar conclusões sobre o desempenho; existem alguns problemas metodológicos (single-threaded ocupado-loop testa), e Redis tem feito algumas melhorias desde que o artigo foi escrito bem.

E nenhuma ligação de referência está completa sem confundir as coisas um pouco, por isso também Confira alguns pontos de referência conflitantes no LiveJournal de Dormondo e no weblog Antirez.

Edit -- como Antirez aponta, a análise do sistema Sistoilet é 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 Clientes em vez de transferência de servidor. Os marcos de referência em O blogue Antirez {[3] } apresentam de facto muito mais maçãs-a-maçãs (com a mesma boca) comparacao.

 37
Author: Paul Smith, 2013-01-03 14:02:19
Tive a oportunidade de usar o memcached e o redis juntos no proxy de cache em que trabalhei , deixa-me partilhar-te exactamente onde usei o que e a razão por trás do mesmo....

Redis >

1) utilizado para indexar o conteúdo da 'cache', sobre o conjunto . Tenho mais de mil milhões de chaves espalhadas por Redis clusters, os tempos de resposta redis são muito menos e estáveis .

2) basicamente, é uma loja chave/valor , por isso, onde quer que seja na sua aplicação você tem algo semelhante, pode - se usar redis com muito incómodo.

([1]}3) Redis persistency, failover and backup (AOF ) will make your job easy .

Memcache >

1) sim, uma memória optimizada que pode ser usada como cache . Eu o usei para armazenar conteúdo de cache sendo acessado com muita frequência (com 50 acessos/segundo)com tamanho inferior a 1 MB .

2) atribuí apenas 2GB de 16 GB para o memcached que também quando o meu tamanho único de conteúdo era >1MB .

([1]}3) à medida que o conteúdo cresce perto da limites, ocasionalmente observei tempos de resposta mais elevados nas estatísticas (não no caso do redis) .

Se você pedir a experiência global Redis é muito verde, pois é fácil de configurar, muito flexível com características robustas estáveis.

Além disso, há um resultado de benchmarking disponível neste link , abaixo estão poucos higlight do mesmo,

enter image description here

enter image description here

Espero que isto ajude!!
 19
Author: Jain Rach, 2016-06-29 06:57:26

Outro bônus é que pode ser muito claro como o memcache vai se comportar em um cenário de cache, enquanto o redis é geralmente usado como um datastore persistente, embora ele possa ser configurado para se comportar como memcached aka despejando itens menos usados recentemente quando ele atinge a capacidade máxima.

Alguns aplicativos em que trabalhei usam ambos para deixar claro como pretendemos que os dados se comportem-coisas em memcache, nós escrevemos código para lidar com os casos em que não está lá - coisas em redis, nós confiamos de lá estar.

Além disso, o Redis é geralmente considerado superior na maioria dos casos de Utilização, sendo mais rico em recursos e, portanto, flexível.

 12
Author: Scott Schulthess, 2012-07-04 12:42:21
Teste. Execute alguns parâmetros de referência simples. Por um longo tempo eu me considerei um rinoceronte da velha escola desde que eu usei principalmente memcached e considerado Redis o garoto novo.

Com a minha empresa Actual, o Redis foi usado como esconderijo principal. Quando investiguei algumas estatísticas de desempenho e simplesmente comecei a testar, o Redis foi, em termos de desempenho, comparável ou minimamente mais lento do que o MySQL.

Memcached, though simplistic, blowed Redis out of water {[[4]} totally . Escalou muito. melhor:

  • para valores maiores (alteração necessária do tamanho da laje, mas trabalhada)
  • para pedidos simultâneos múltiplos

Além disso, a Política de despejo do memcached é, na minha opinião, muito melhor implementada, resultando em um tempo de resposta médio mais estável ao lidar com mais dados do que o cache pode lidar.

Alguns benchmarking revelaram que a Redis, no nosso caso, tem um desempenho muito fraco. Isso eu acredito que tem a ver com muitas variáveis:
  • Tipo de hardware corres o Redis em
  • tipos de dados que armazena
  • quantidade de gets e sets
  • quão concorrente a sua aplicação é
  • precisa de armazenamento da estrutura de Dados
Pessoalmente, não partilho da visão que os autores Redis têm sobre concorrência e multithreading.
 12
Author: mdomans, 2015-11-13 08:14:27

Não seria errado, se disséssemos que o redis é uma combinação de (cache + estrutura de dados) enquanto o memcached é apenas um cache.

 9
Author: Atif Hussain, 2015-06-16 05:45:06

Uma grande diferença que não foi apontada aqui é que o Memcache tem um limite de memória superior em todos os momentos, enquanto o Redis não tem por padrão (mas pode ser configurado para). Se você sempre gostaria de armazenar uma chave / valor para uma certa quantidade de tempo (e nunca despejá-lo por causa da memória baixa) você quer ir com o Redis. Claro que também corre o risco de ficar sem memória...

 7
Author: Ztyx, 2013-03-01 09:45:27

Um teste muito simples para definir e obter 100K chaves e valores únicos contra o redis-2.2.2 e o memcached. Ambos estão em execução no linux VM(CentOS) e o código do meu cliente (colado abaixo) é executado no Windows desktop.

Redis

  • Tempo necessário para armazenar 100000 valores é = 18954ms

  • Tempo necessário para carregar 100000 valores é = 18328ms

Memcached

  • Tempo necessário para armazenar 100000 valores é = 797ms

  • Tempo necessário para obter 100000 valores é = 38984ms


Jedis jed = new Jedis("localhost", 6379);
int count = 100000;
long startTime = System.currentTimeMillis();
for (int i=0; i<count; i++) {
  jed.set("u112-"+i, "v51"+i);
}
long endTime = System.currentTimeMillis();
System.out.println("Time taken to store "+ count + " values is ="+(endTime-startTime)+"ms");

startTime = System.currentTimeMillis();
for (int i=0; i<count; i++) {
  client.get("u112-"+i);
}
endTime = System.currentTimeMillis();
System.out.println("Time taken to retrieve "+ count + " values is ="+(endTime-startTime)+"ms");
 6
Author: Prabhu Nandan Kumar, 2017-11-04 06:57:41
Pensámos na Redis como uma descolagem para o nosso projecto no trabalho. Pensamos que ao usar um módulo em nginx chamado HttpRedis2Module ou algo semelhante teríamos uma velocidade incrível, mas ao testar com AB-test estamos comprovadamente errados. Talvez o módulo fosse mau ou o nosso layout, mas era uma tarefa muito simples e era ainda mais rápido levar dados com o php e depois metê-los no MongoDB. Estamos a usar o APC como sistema de cache e com o php e o MongoDB. Foi muito mais rápido do que nginx Módulo Redis. A minha dica é testá-lo você mesmo, fazê-lo irá mostrar-lhe os resultados para o seu ambiente. Decidimos que a utilização do Redis era desnecessária no nosso projecto, uma vez que não faria qualquer sentido.
 5
Author: Ms01, 2012-07-05 11:48:40
A maior razão restante é a especialização.

Redis pode fazer um monte de coisas diferentes e um efeito colateral disso é que os desenvolvedores podem começar a usar um monte desses diferentes conjuntos de recursos na mesma instância. Se você está usando o recurso LRU do Redis para um cache ao longo do armazenamento de dados hard lado que não é LRU é inteiramente possível ficar sem memória.

Se você vai configurar uma instância Redis dedicada para ser usado apenas como uma instância da EFP para evitar esse particular cenário então não há nenhuma razão convincente para usar Redis sobre Memcached.

Se precisares de um cache fiável "nunca vai abaixo" da LRU...Memcached irá se encaixar na conta, uma vez que é impossível para ele ficar sem memória por design e a funcionalidade specialize impede os desenvolvedores de tentar torná-lo algo que poderia colocar em perigo isso. Simples separação de preocupações.
 4
Author: brightball, 2015-11-20 21:32:31
O Redis é melhor. Os prós da Redis são,
1.It has a lot of data storage options such  as  string  , sets , sorted sets ,  hashes ,  bitmaps
2.Disk Persistence of records 
3.Stored Procedure (LUA acripting)  support
4.Can act as a Message Broker using PUB/SUB

Enquanto o Memcache é um sistema de cache de códigos de memória.

  1. não existe suporte para vários tipos de dados como listas, conjuntos como em redis.
  2. O maior golpe é que o Memcache não tem persistência no disco .
 2
Author: athavan kanapuli, 2017-03-22 04:22:12

O Memcached será mais rápido se estiver interessado no desempenho, mesmo porque o Redis envolve redes (chamadas TCP). Também internamente Memcache é mais rápido.

O Redis tem mais características, já que foi mencionado por outras respostas.
 1
Author: Denys, 2018-06-19 20:55:47

Bem, eu usei principalmente tanto com os meus aplicativos, Memcache para cache as sessões e redis para objetos doutrine / orm queries. Em termos de desempenho, ambos são quase iguais.

 0
Author: Muhammad Taqi, 2016-10-31 21:08:55