memcache vs memcached?

76

Eu quero usar o memcached

http://www.danga.com/memcached/

Eu instalei-o através yum install memcached

Mas agora eu preciso me conectar ao PHP, e há uma extensão chamada memcache e uma chamada memcached? ARGH

http://us3.php.net/manual/en/book.memcache.php
http://us3.php.net/manual/en/book.memcached.php

Alguém poderia me apontar na direção certa aqui .. qual deles vai funcionar?

Além disso, preciso abrir portas para que ele funcione, mesmo que seja local? Depois de executá-lo, tento o telnet 127.0.0.1 11211 e recebo a conexão recusada.

thanksyo
fonte
24
Se você está analisando essa pergunta agora, lembre-se de que a resposta aceita está errada . Escolher uma solução baseada apenas no nome é perigoso, principalmente quando aquele com o melhor nome é um projeto pior. Veja as outras respostas para mais informações.
tylerl
@ obrigado, desmarque a resposta que você verificou. Isso apenas confundirá mais pessoas que chegam aqui tarde. Enquanto isso, diminuí a votação da resposta incorreta e sugiro que outras pessoas façam o mesmo, até que obrigado a desmarcá-la.
joedevon

Respostas:

24

A resposta curta: Qualquer um deles é o que você está procurando, mas minha primeira opção seria o memcache (o primeiro que você listou), puramente baseado no uso correto da nomenclatura.

Agora, aqui está como cheguei a essa conclusão:

Aqui está um plano de fundo rápido das convenções de nomenclatura (para quem não conhece), o que explica a frustração do solicitante da pergunta: Para muitos aplicativos * nix, a parte que executa o back-end é chamada de "daemon" (pense em "serviço" no Windows- terra), enquanto a interface ou aplicativo cliente é o que você usa para controlar ou acessar o daemon. O daemon geralmente é nomeado igual ao cliente, com a letra "d" anexada a ele. Por exemplo, "imap" seria um cliente que se conecta ao daemon "imapd".

Esta convenção de nomenclatura está claramente sendo respeitada pelo memcache quando você lê a introdução ao módulo memcache (observe a distinção entre memcache e memcached neste trecho):

O módulo Memcache fornece uma interface prática, orientada a procedimentos e objetos, para o daemon de cache altamente eficaz e armazenado em memória, especialmente desenvolvido para diminuir a carga do banco de dados em aplicativos dinâmicos da Web.

O módulo Memcache também fornece um manipulador de sessão (memcache).

Mais informações sobre o memcached podem ser encontradas em » http://www.danga.com/memcached/ .

A frustração aqui é causada pelo autor da extensão PHP que recebeu o nome incorreto de memcached , pois compartilha o mesmo nome que o daemon real chamado memcached . Observe também que, na introdução ao memcached (o módulo php) , ele menciona a libmemcached , que é a biblioteca compartilhada (ou API) usada pelo módulo para acessar o daemon memcached:

O memcached é um sistema de armazenamento em cache de objetos de memória distribuída de alto desempenho, de natureza genérica, mas destinado a acelerar aplicativos dinâmicos da Web, aliviando a carga do banco de dados.

Essa extensão usa a biblioteca libmemcached para fornecer API para comunicação com servidores memcached. Ele também fornece um manipulador de sessão (memcached).

Informações sobre libmemcached podem ser encontradas em » http://tangent.org/552/libmemcached.html .

Em resumo, ambos são funcionalmente iguais, mas eles simplesmente têm autores diferentes, e um é simplesmente nomeado de maneira mais apropriada que o outro.

Jessica McKinnon
fonte
70
O nome do projeto é realmente um motivo apropriado para escolher uma implementação em detrimento da outra?
9119 David Pashley
4
David: Não exatamente ... mas certamente é uma razão suficiente para deixar uma implementação específica até a última em meus testes, dando assim preferência às outras. Eu provavelmente ainda tentaria todas as implementações disponíveis, mas falhas técnicas nas descrições de software pelo autor tendem a me fazer pensar sobre quais falhas técnicas podem estar no software. Entretanto, eu li o seu comentário sobre o software real, então também lhe dei um voto positivo pela sua resposta. :-)
Jessica McKinnon
4
Eu nunca pensei que o "d" no memcached significasse deamon, mas significasse o particípio passado do cache de verbos. Além disso, você não pode nomear a nova interface como "memcache", pois já existe uma com esse nome.
GetFree
9
A quantidade de bugs e a extensão desenvolvida ou não são muito mais importantes do que analisar o problema d. Sério, você não deve sequer pensar em testar uma extensão passado por causa de algo assim, é completamente fora do bastão
Fake51
12
Erm, ambos não são funcionalmente iguais: memcachedsuporta tokens cas, por exemplo, memcachenão. Se você precisar, você sabe qual (com o nome errado ou não) para escolher.
Wrikken
56

Você provavelmente deseja ver a Comparação de Clientes PHP .

Versão curta: Ambos funcionarão e, na maioria dos casos, qualquer um deles se sairá bem.

Em relação à outra questão: Sim, você deve conseguir telnet 127.0.0.1 11211. Muito poucos firewalls impediriam que o host local se comunicasse. Se você não conseguir se conectar, verifique se o memcached realmente está executando ps auxwww | grep memcached, o que também mostrará os argumentos da linha de comando usados ​​para iniciar o memcached. Um dos argumentos deve ser -p 11211ou outro número de porta. Veja man memcachedo significado de todos os argumentos possíveis.

Nate
fonte
2
Voto positivo por adicionar algumas etapas de solução de problemas.
6139 Jessica McKinnon
Esta é realmente a resposta clara.
Danidacar 12/08
@ Nate, qual é o equivalente do Windows ps auxwww | grep memcached?
Pacerier
1
@Pacerier: Dê uma olhada em superuser.com/questions/415360/… . O Process Explorer é a maneira mais fácil de encontrar um processo em execução e ver seus argumentos de linha de comando.
Nate
@Pacerier esse comando, verificando se o processo do servidor está em execução e vendo como foi chamado.
Jasen
27

Como o link de Nate sugere, ambos funcionam perfeitamente bem para uso simples. No entanto, o memcached suporta mais recursos que permitem obter o máximo desempenho do memcached. O protocolo binário reduz a quantidade de dados necessária para o envio entre o cliente e o servidor. Multigets e multisets permitem que você obtenha / defina vários itens ao mesmo tempo. Se você achar que precisa de mais informações sobre o memcache, o memcached é o melhor módulo. O uso do libmemcached sugere que a própria biblioteca é possivelmente mais otimizada do que a versão somente para PHP.

Memcached é um módulo mais recente em comparação com o memcache, tendo sido lançado apenas 8 meses atrás. Se você precisar direcionar uma versão mais antiga do PHP, poderá usar apenas o memcache.

David Pashley
fonte
Ótima explicação!
Joao
21

O mais antigo e mais problemático é chamado php-memcacheporque esse parecia o nome mais apropriado. A versão melhor e mais nova, desenvolvida de forma independente pelo pessoal do Digg, foi nomeada php-memcachedno interesse da desambiguação.

As pessoas que recomendam que você escolha uma sobre a outra, com base unicamente na exatidão do nome, não têm como oferecer consultoria técnica.

tylerl
fonte
6

Tendo usado o php-memcache recentemente, eu teria que apontar para o php-memcached.

Aqui estão algumas razões em cima da minha cabeça ..

1) Não há método getErrorCode () ou equivalente; portanto, se get () retornar FALSE, você não terá idéia se isso ocorre porque o valor armazenado no memcache é falso ou se houve algum problema.

2) Seu algoritmo de hash para hash consistente parece diferir de outras implementações, como as muitas bibliotecas de clientes criadas com o libmemcached. Isso significa que, se você quiser usar o mesmo cluster do memcache com vários idiomas, provavelmente terá problemas em que irá armazenar um valor com o cliente PHP, e outros clientes não o encontrarão.


fonte
3

Ambos têm problemas a partir de hoje. O PECL / memcache é antigo e confiável, com algumas exceções em que está desatualizado. PECL / memcached 1.x é beta na melhor das hipóteses. Algumas funções não lidam com teclas numéricas, elas vazam conexões ao usar conexões persistentes. Alguns (todos?) Estão sendo corrigidos no GitHub e serão lançados em algum momento no 2.x, mas não hoje. Para uma revisão mais detalhada, consulte http://brian.moonspot.net/php-memcached-issues

Brian Moon
fonte
O PECL / memcached 1.x agora está estável; PECL / memcache 2.x é limitado; O PECL / memcache 3.x é altamente instável.
Aredridel 28/02
2

Estou trabalhando em um livro "Expert PHP and MySQL". Eu escrevi praticamente a mesma coisa sobre as diferenças. O que eu recomendei foi PECL / memcached. # 1 - envolve uma biblioteca C de bom desempenho com todos os recursos # 2 - é mantida mais recentemente. # 3 - mais recursos. Nenhuma depreciação para PECL / memcache.


fonte
0

Eu tive alguns problemas bastante graves com o Drupal 6 e o ​​php-pecl-memcached nos quais os tempos de resposta foram atrasados ​​em até 5ms por chamada e causariam um site em particular criar 5x mais chamadas do que antes da alteração para php-pecl-memcached . Mudar para php-pecl-memcache corrigiu todos os problemas; latência e chamadas extras.

Esta resposta está aqui apenas para ajudar aqueles que usam o Drupal 6 e possivelmente o Drupal 7.

Spechal
fonte
-3
  • memcache é um cliente de memcached (o servidor)
  • libmemcached também é um cliente para memcached

E há outros clientes para memcached, consulte http://code.google.com/p/memcached/wiki/Clients

Recortar e colar da Web:

http://www.php.net/manual/en/intro.memcache.php

  Memcache module provides handy procedural and object oriented 
  interface to memcached, highly effective caching daemon, which was 
  especially designed to decrease database load in dynamic web applications.
The Memcache module also provides a session handler (memcache).
More information about memcached can be found at » www.memcached.org 

http://www.php.net/manual/en/intro.memcached.php

   » memcached (http://www_memcached_org/) is a high-performance, distributed 
  memory object caching system, generic in nature, but intended for use in 
  speeding up dynamic web applications by alleviating database load.
  This extension uses libmemcached library to provide API for communicating with
  memcached servers. It also provides a session handler (memcached).
  Information about libmemcached can be found at 
   » tangent.org/552/libmemcached.html

http://pecl.php.net/package/memcached "Extensão PHP para interface com o memcached via biblioteca libmemcached" Esta extensão usa a biblioteca libmemcached para fornecer API para comunicação com servidores memcached. https://github.com/andreiz/php-memcached

http://pecl.php.net/package/memcache "extensão memcached" Memcached é um daemon de cache projetado especialmente para aplicativos dinâmicos da web para diminuir a carga do banco de dados armazenando objetos na memória. Esta extensão permite que você trabalhe com o memcached por meio de interfaces OO e procedimentais práticas.

http://code.google.com/p/memcached/wiki/PHPClientComparison

                        pecl/memcache      pecl/memcached
  First Release Date      2004-06-08         2009-01-29 (beta)
  Actively Developed?     Yes                    Yes
  External Dependency     None              libmemcached
user62392
fonte
6
Essa resposta prolongada nem chega perto de deixar as coisas claras para o pôster. O pôster já está ciente de que há vários clientes. Listá-los e propor nomes alternativos não facilita a escolha do nome certo.
Martijn Heemels