memcache vs memcached?

72

Eu quero usar o memcached

link

Eu o instalei por meio de yum install memcached

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

link
link

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

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

    
por thanksyo 08.09.2009 / 17:27

9 respostas

24

A resposta curta: Qualquer um é o que você está procurando, mas minha primeira escolha seria 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 rápido backgrounder nas convenções de nomenclatura (para aqueles que não estão familiarizados), o que explica a frustração do questionador: Para muitas aplicações * nix, a parte que faz o trabalho de backend é chamada de daemon (pense em "service"). no Windows), enquanto a interface ou aplicativo cliente é o que você usa para controlar ou acessar o daemon. Na maioria das vezes, o daemon tem o mesmo nome do cliente, com a letra "d" anexada a ele. Por exemplo, "imap" seria um cliente que se conecta ao daemon "imapd".

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

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 » http://www.danga.com/memcached/.

A frustração aqui é causada pelo autor da extensão do PHP que foi mal nomeada memcached , pois compartilha o mesmo nome que o daemon real chamado memcached . Note também que na introdução ao memcached (o módulo php) , faz menção ao libmemcached , que é a biblioteca compartilhada (ou API) que é usada pelo módulo para acesse o daemon memcached:

memcached 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 » http://tangent.org/552/libmemcached.html.

Em resumo, ambos são funcionalmente os mesmos, mas eles simplesmente têm autores diferentes, e um é simplesmente chamado de forma mais apropriada que o outro.

    
por 08.09.2009 / 18:16
55

Você provavelmente quer ver a Comparação de clientes PHP .

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

Em relação ao outro problema: sim, você deve conseguir fazer telnet 127.0.0.1 11211 . Muito poucos firewalls bloqueariam o host local de se comunicar com ele mesmo. Se você não conseguir se conectar, verifique se o memcached está realmente em execução fazendo ps auxwww | grep memcached , que também mostrará os argumentos de linha de comando usados para iniciar o memcached. Um dos argumentos deve ser -p 11211 ou outro número de porta. Veja man memcached para o significado de todos os argumentos possíveis.

    
por 08.09.2009 / 18:08
27

Como o link de Nate sugere, ambos funcionam perfeitamente 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ários para serem enviados entre o cliente e o servidor. Multigets e multisets permitem obter / definir vários itens ao mesmo tempo. Se você está achando que precisa de mais memória do memcache, o memcached é o melhor módulo. O uso do libmemcached sugere que a biblioteca em si é possivelmente mais otimizada do que a versão somente do PHP.

O Memcached é um módulo mais recente comparado ao memcache, tendo sido lançado apenas oito meses atrás. Se você precisa direcionar uma versão mais antiga do PHP, então você só pode usar o memcache.

    
por 08.09.2009 / 19:56
21

O mais velho e buggier é chamado de php-memcache porque esse parecia ser o nome mais apropriado. A versão mais nova e melhor desenvolvida independentemente pelo pessoal do Digg foi nomeada php-memcached no interesse da desambiguação.

As pessoas que recomendam que você escolha uma sobre a outra com base apenas na exatidão do nome realmente não têm negócios que ofereçam consultoria técnica.

    
por 24.08.2010 / 06:15
6

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

Aqui estão algumas razões para o topo da minha cabeça.

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

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

    
por 09.11.2009 / 22:08
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 chaves numéricas, elas vazam conexões quando usam conexões persistentes. Alguns (todos?) Estão sendo corrigidos no GitHub e serão lançados em algum ponto em 2.x, mas não hoje. Para uma análise mais detalhada, consulte o link

    
por 24.06.2010 / 19:26
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 o PECL / memcached. # 1 - envolve uma biblioteca C de bom desempenho com todos os recursos # 2 - é mantida mais recentemente. # 3 - mais recursos. Não depreciação ao PECL / memcache.

    
por 02.12.2009 / 16:21
0

Eu tive alguns problemas bastante graves com o Drupal 6 e o php-pecc-memcached, nos quais os tempos de resposta eram atrasados em até 5ms por chamada e levariam um site específico a criar 5x mais chamadas do que antes da alteração para php- memória-pecl. 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.

    
por 05.09.2012 / 21:24
-3
  • memcache é um cliente do memcached (o servidor)
  • libmemcached também é um cliente para o memcached

E há outros clientes para o memcached, consulte o link

Cortar & colar da web:

link

  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 

link

   » 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

link "Extensão PHP para interface com o memcached via biblioteca libmemcached"   Essa extensão usa a biblioteca libmemcached para fornecer API para comunicação com servidores memcached. link

link "extensão do memcached"   O Memcached é um daemon de armazenamento em cache projetado especialmente para aplicativos da Web dinâmicos para diminuir o carregamento do banco de dados, armazenando objetos na memória. Esta extensão permite que você trabalhe com memcached através de interfaces OO e procedurais úteis.

link

                        pecl/memcache      pecl/memcached
  First Release Date      2004-06-08         2009-01-29 (beta)
  Actively Developed?     Yes                    Yes
  External Dependency     None              libmemcached
    
por 03.12.2010 / 07:16