2009-05-02 21 views
152

He leído este artículo: http://www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/ desde hace mucho tiempo ... Quiero obtener el mejor motor de almacenamiento en caché disponible para que mi aplicación sea realmente rápida. Por supuesto, no quiero sobre-caché, pero al menos quiero elegir lo mejor que haya. En ese artículo dice que Memcached es lento y que la APC es rápida, ¿por qué todos eligen memcached?Memcached vs APC ¿cuál debo elegir?

http://framework.zend.com/manual/en/zend.cache.backends.html#zend.cache.backends.twolevels aquí se dice "use uno rápido (pero limitado) como Apc, Memcache ... y uno" lento "como File, Sqlite ..." ¿cree que usar Apc como el rápido y Memcache como el lento es una buena idea?

+14

BTW: debe utilizar APC incluso si no utiliza 'apc_store'. El caché del código de operación solo hace PHP pocas veces más rápido. – Kornel

+0

@porneL: ¿qué quieres decir? ¿APC aumenta la velocidad de PHP después de la instalación, incluso si no agrego código para almacenar en caché nada en mis scripts? –

+5

@Marco Demaio: De hecho. APC es principalmente un optimizador de PHP (se optimiza por defecto siempre que esté habilitado), y 'apc_store()' es solo una bonificación adicional además de eso. – Kornel

Respuesta

40

Memcached si necesita preservar el estado en varios servidores web (si está equilibrado de carga y es importante que lo que hay en la memoria caché sea el mismo para todos los servidores).

APC si solo necesita acceder a la memoria rápida para leer (& escribir) en un (o cada) servidor.

Recuerde APC también puede compilar y acelerar el tiempo de ejecución de su script. Por lo que podría, por ejemplo, estar utilizando APC para un mayor rendimiento de ejecución, mientras usa memcached para el almacenamiento en caché.

+3

APC también puede almacenar en caché ... ¿O? –

+7

Actualización de 2014: PHP 5.5 incluirá Zend Optimizer Plus (que es solo para opcache, no para caché de usuario) y parece que APC no se desarrollará más allá de PHP 5.4. Sin embargo, ahora hay APCu http://pecl.php.net/package/APCu, que tomó solo las partes de caché del usuario de APC – Flion

253

Memcached es un sistema de almacenamiento en caché distribuido, mientras que APC no está distribuido, y principalmente es un caché de código de operación.

Si (y solo si) tiene una aplicación web que tiene que vivir en diferentes servidores web (loadbalancing), debe usar memcache para el almacenamiento en caché distribuido. Si no, simplemente adhiérase a APC y su caché.

Siempre debe usar una memoria caché de código de operación, que es APC (también APC se integrará en php6 iirc, entonces ¿por qué no empezar a usarlo ahora?).

Puede/debe usar ambos para diferentes propósitos.

+5

Impresionante respuesta +1. Mi pregunta ahora es ¿qué es un caché de "código de operación"? –

+4

@Karsten Si tiene diferentes servidores (como un entorno de carga de nube) siempre que no necesite mantener/compartir el estado entre ellos, APC también funcionará bien como un caché de memoria directo, aunque tal vez no tan óptimo como cada instancia de nube tendrá que calentar su propio caché ... – Ray

+32

Un caché de 'código de operación' es aquel que compila el código PHP simple en código máquina ("código de operación") y luego lo almacena en el formulario compilado para futuras solicitudes (hasta que detecta el archivo PHP original ha cambiado). Esto significa que PHP no tiene que ejecutar este paso de compilación en cada solicitud, ahorrando tiempo. Es solo una de las formas de ayudar a garantizar un sitio rápido (entre muchos otros). –

5

Hola Thomaschaaf, espero que esto no sea una herramienta tarde para ti, pero ten en cuenta que APC tiene algunos problemas relacionados con "user-cache". Para abreviar, cuando establece tiempos de espera para entradas de caché, o si su apache se cuelga dentro del código APC interno (tiempo de espera, por ejemplo), entonces puede sufrir algunos problemas.

que tienen una entrada sobre el tema aquí: http://nirlevy.blogspot.com/2009/06/apc-futexwait-lockdown-make-your-apache.html, y también debe leer http://t3.dotgnu.info/blog/php/user-cache-timebomb.html (de uno de los desarrolladores de APC creo)

+22

Me encontré con esto y quería actualizar que parece que ya se ha abordado (¡como debería, 2 años después!). Aquí hay un informe de error cerrado, por ejemplo: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=572529 –

8

Puedo utilizar uno para la velocidad y el otro para sincronizar todos mis servidores. Si usa Memcache, tenga en cuenta los puertos abiertos que deberá bloquear con iptables.

1

Uso solo APC ya que APC es un caché de código y actúa como Memcache. Sólo 1 de ficheros de configuración en lugar de 2.

Y sólo 1 lugar para supervisar tanto caché .....

1

Depende de lo que está haciendo, pero para mis sitios web de Drupal que se ejecutan en un VPS encuentro APC trabaja grande ! Si está ejecutando CentOS 6, está disponible como una actualización yum tan fácil de instalar y sin configuración, ya que los valores predeterminados son razonables. Un pan comido.

15

La principal ventaja de APC es el caché de código de operación. Desde PHP 5.5 integrado OpCache a su núcleo y APC para PHP 5.4 todavía se marca como beta, no es anuncio oficial, pero el desarrollo de APC se abandonará en un futuro próximo.

Así que le recomendaría que elija Memcached.

+4

He pasado horas en la web para pensarlo, y tengo la misma conclusión. –

Cuestiones relacionadas