Memcached vs APC, qual devo escolher? [fechadas]

161

Li este artigo: http://www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/ desde quando eu quero obter o melhor mecanismo de cache disponível para que meu aplicativo seja realmente rápido. É claro que não quero armazenar em cache em excesso, mas quero pelo menos escolher a melhor coisa disponível. Nesse artigo, ele diz que o Memcached é lento e o apc é rápido. Por que todos estão escolhendo o memcached ?

http://framework.zend.com/manual/en/zend.cache.backends.html#zend.cache.backends.twolevels aqui diz "use um rápido (mas limitado) como Apc, Memcache ... e um "lento" como File, Sqlite ... "você acha que usar o Apc como o rápido e o Memcache como o lento é uma boa idéia?

Thomaschaaf
fonte
14
BTW: você deve usar a APC mesmo que não a utilize apc_store. O cache do Opcode sozinho torna o PHP algumas vezes mais rápido.
Kornel
@porneL: o que você quer dizer? A APC aumenta a velocidade do PHP após apenas a instalação, mesmo que eu não adicione código para armazenar nada em cache nos meus scripts?
Marco Demaio 02/04/12
5
@Marco Demaio: De fato. A APC é principalmente um otimizador de PHP (otimizado por padrão, desde que esteja ativado) e apc_store()é apenas um bônus extra.
Kornel
3
em 2014, se você o usar apenas para armazenar em cache em 1 servidor, vá para o APCu.
Flion

Respostas:

268

Memcached é um sistema de cache distribuído, enquanto o APC não é distribuído - e principalmente um cache de código de operação.

Se (e somente se) você tiver um aplicativo Web que precise residir em diferentes servidores Web (balanceamento de carga), precisará usar o memcache para o cache distribuído. Caso contrário, atenha-se à APC e seu cache.

Você sempre deve usar um cache de opcode, que é o APC (também o APC será integrado ao php6 iirc, por que não começar a usá-lo agora).

Você pode / deve usar os dois para fins diferentes.

Karsten
fonte
5
Resposta impressionante +1. Minha pergunta agora é o que é um opcodecache?
Marco Demaio 02/04
4
@Karsten Se você tiver servidores diferentes (como um ambiente de carga de nuvem), desde que não precise manter / compartilhar o estado entre eles, a APC também funcionará bem como um cache de memória direto - embora talvez não seja o ideal instância de nuvem terá de aquecer seu próprio cache ...
Ray
35
Um opcodecache é aquele que compila o código PHP simples no código da máquina ("opcode") e o armazena no formulário compilado para solicitações futuras (até detectar o arquivo PHP original alterado). Isso significa que o PHP não precisa executar esta etapa de compilação em cada solicitação, economizando tempo. É apenas uma das maneiras de ajudar a garantir um site rápido (entre muitos outros).
Simon East
2
Há um slideshow interessante que explica algumas das diferenças com diagramas e pontos de referência, aqui: slideshare.net/FordAntiTrust/php-performance-with-apc-memcached
Simon Médio
1
O memechached pode ser usado em sistemas não distribuídos em vez da APC? Será bom manter apenas um se, no futuro, você tiver mais máquinas. certo? Ou use os dois, um para opcode e outro para cache extensível?
Adib Aroui
43

Memcached, se você precisar preservar o estado em vários servidores Web (se você tiver equilíbrio de carga e for importante que o conteúdo do cache seja o mesmo para todos os servidores).

APC se você precisar apenas de acesso à memória rápida para ler (e gravar) em um servidor (ou em cada).

Lembre-se de que a APC também pode compilar e acelerar o tempo de execução do script. Portanto, você pode, por exemplo, usar o APC para aumentar o desempenho da execução, enquanto usa o memcached para armazenamento em cache.

xkcd150
fonte
3
A APC também pode armazenar em cache o armazenamento .... Ou?
21713 jm
7
Atualização de 2014: o PHP 5.5 nativamente inclui o Zend Optimizer Plus (que é apenas para o opcache, portanto não para o cache do usuário) e parece que a APC não será desenvolvida além do PHP 5.4? No entanto, agora existe o APCu pecl.php.net/package/APCu , que levou apenas as partes de cache do usuário do APC
Flion
18

O principal avanço da APC é o cache do código de operação. Como o PHP 5.5 integrou o OpCache em seu núcleo e o APC para PHP 5.4 ainda está marcado como beta, não é um comunicado oficial, mas o desenvolvimento do APC seria descartado no futuro próximo.

Então, eu recomendo que você escolha o Memcached.

Hieu Vo
fonte
5
Passei horas na web pensando nisso e tenho a mesma conclusão.
Nicolas Zozol
9

Eu uso um para velocidade e outro para sincronizar todos os meus servidores. Se você usa o memcache, lembre-se das portas abertas que você precisará bloquear com o iptables.

Saimon Lovell
fonte
6

Olá Thomaschaaf, espero que não seja uma ferramenta atrasada para você, mas observe que a APC tem alguns problemas relacionados ao "cache do usuário". Para resumir uma longa história, quando você define tempos limite para entradas de cache ou se seu apache trava dentro do código interno da APC (tempo limite, por exemplo), você pode sofrer alguns problemas.

Tenho uma entrada sobre o problema aqui: http://nirlevy.blogspot.com/2009/06/apc-futexwait-lockdown-make-your-apache.html , e você também deve ler http: //t3.dotgnu. info / blog / php / user-cache-timebomb.html (de um dos desenvolvedores da APC, eu acho)

Nir Levy
fonte
22
Eu me deparei com isso e queria atualizar que parece ter sido resolvido agora (como deveria, 2 anos depois!). Aqui está um relatório de erro fechado, por exemplo: bugs.debian.org/cgi-bin/bugreport.cgi?bug=572529 #
Shane H
1

Eu uso apenas o APC, pois o APC é um cache de código e atua como memcache! Apenas 1 arquivo de configuração em vez de 2.

E apenas um lugar para monitorar os dois cache .....

Thomas Decaux
fonte
1

Depende do que você está fazendo, mas para meus sites drupal rodando em um VPS, acho que a APC funciona muito bem! Se você estiver executando o CentOS 6, ele estará disponível como uma atualização do yum, simples de instalar e sem configuração, pois os padrões são razoáveis. Um imho acéfalo.

fred
fonte