Memcached vs APC, ¿cuál debo elegir? [cerrado]

161

Leí 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 over-cache pero quiero al menos elegir lo mejor que hay. En ese artículo dice que Memcached es lento y apc es rápido, entonces ¿por qué todos eligen Memcached ?

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

Thomaschaaf
fuente
14
Por cierto: debe usar APC incluso si no lo usa apc_store. Opcode cache solo hace que PHP sea varias veces más rápido.
Kornel
@porneL: ¿qué quieres decir? ¿APC aumenta la velocidad de PHP después de la instalación, incluso si no agrego código a la memoria caché en mis scripts?
Marco Demaio
55
@Marco Demaio: De hecho. APC es principalmente un optimizador de PHP (optimiza de forma predeterminada siempre que esté habilitado), y además apc_store()es una ventaja adicional.
Kornel
3
en 2014, si solo lo usa para almacenar en caché en 1 servidor, elija APCu.
Flion

Respuestas:

268

Memcached es un sistema de almacenamiento en caché distribuido, mientras que APC no está distribuido, y principalmente 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 (equilibrio de carga), debe usar memcache para el almacenamiento en caché distribuido. Si no, solo quédate con APC y su caché.

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

Puede / debe usar ambos para diferentes propósitos.

Karsten
fuente
55
Impresionante respuesta +1. Mi pregunta ahora es ¿qué es un opcodecaché?
Marco Demaio
44
@Karsten Si tiene diferentes servidores (como un entorno de equilibrio de carga en la 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 sea tan óptimo como cada uno la instancia de la nube tendrá que calentar su propio caché ...
Ray
35
Un opcodecaché es aquel que compila el código PHP simple en el código de máquina ("opcode") y luego lo almacena en el formulario compilado para futuras solicitudes (hasta que detecta que el archivo PHP original ha cambiado). Esto significa que PHP no tiene que ejecutar este paso de compilación en cada solicitud, ahorrando algo de tiempo. Es solo una de las formas de ayudar a garantizar un sitio rápido (entre muchos otros).
Simon East
2
Hay una presentación de diapositivas interesante que explica algunas de las diferencias con los diagramas y puntos de referencia, aquí: slideshare.net/FordAntiTrust/php-performance-with-apc-memcached
Simon East
1
¿Memechached se puede usar en un sistema no distribuido en lugar de APC? Será bueno conservar solo uno si en el futuro tendrá más máquinas. ¿Derecha? ¿O usarlos ambos, uno para el código de operación y el otro para el almacenamiento en caché extensible?
Adib Aroui
43

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

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

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

xkcd150
fuente
3
APC también puede almacenar en caché ... ¿O?
mr_app
77
Actualización de 2014: PHP 5.5 incluirá de forma nativa Zend Optimizer Plus (que es solo para opcache, por lo que no para el caché del usuario) y parece que APC no se desarrollará más allá de PHP 5.4. Sin embargo, ahora hay APCu pecl.php.net/package/APCu , que tomó solo las partes de caché de usuario de APC
Flion
18

La principal ventaja de APC es la caché de código de operación. Dado que PHP 5.5 integró OpCache en su núcleo y APC para PHP 5.4 todavía está marcado como beta, no es un anuncio oficial, pero el desarrollo de APC se eliminaría en un futuro próximo.

Por lo tanto, le recomendaría que elija Memcached.

Hieu Vo
fuente
55
He pasado horas en la web para pensarlo, y tengo la misma conclusión.
Nicolas Zozol
9

Utilizo uno para la velocidad y el otro para sincronizar todos mis servidores. Si utiliza memcache, tenga en cuenta los puertos abiertos que deberá bloquear con iptables.

Saimon Lovell
fuente
6

Hola Thomaschaaf, espero que no sea una herramienta tarde para ti, pero ten en cuenta que APC tiene algunos problemas relacionados con el "caché de usuario". Para resumir, cuando configuras tiempos de espera para entradas de caché, o si tu apache se bloquea dentro del código interno de APC (tiempo de espera, por ejemplo), entonces puedes sufrir algunos problemas.

Tengo una entrada sobre el problema 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 (creo que de uno de los desarrolladores de APC)

Nir Levy
fuente
22
Me topé con esto y quise actualizar que parece haber sido abordado ahora (¡como debería, 2 años después!). Aquí hay un informe de error cerrado, por ejemplo: bugs.debian.org/cgi-bin/bugreport.cgi?bug=572529
Shane H
1

¡Solo uso APC ya que APC es un caché de código y actúa como memcache! Solo 1 archivo de configuración en lugar de 2.

Y solo 1 lugar para monitorear ambos caché .....

Thomas Decaux
fuente
1

Depende de lo que esté haciendo, pero para mis sitios web de drupal que se ejecutan en un VPS, ¡encuentro que APC funciona muy bien! Si está ejecutando CentOS 6, está disponible como una actualización yum muy simple de instalar y sin configuración ya que los valores predeterminados son razonables. Un obvio imho.

Fred
fuente