¿Cuándo debo usar Memcache en lugar de Memcached?

321

Parece que PHP tiene dos bibliotecas memcached llamadas memcache y memcached . ¿Cuál es la diferencia y cómo sabes cuál usar? ¿Está uno desactualizado? Parece que memcached ofrece más métodos, así que supongo que eso significa que ha tenido el mayor desarrollo, pero también parece requerir bibliotecas externas de C / C ++, así que no estoy seguro de si puedo instalarlo.

¡Parece que Memcache ha existido por más tiempo, no requiere bibliotecas adicionales y tiene binarios precompilados incluso para Windows! Creo que sería la mejor opción por ahora. Sin embargo, al ser nuevo en memcached (servidor), no estoy seguro de si hay algunas características súper importantes en memcached (php) que hacen que valga la pena el problema adicional.

Xeoncross
fuente
1
ZendCon tiene un buen episodio comparando los dos. ZendCon Sessions Episodio 040: Memcached: la mejor interfaz de Memcache
John Magnolia
duplicado de serverfault.com/questions/63383/memcache-vs-memcached por solo unos días, pero esto obtuvo más vistas y votos :)
Stefano

Respuestas:

249

La biblioteca de cliente Memcached se lanzó recientemente como estable. Digg lo está utilizando (fue desarrollado para digg por Andrei Zmievski, ahora ya no con digg) e implementa mucho más el protocolo memcached que el cliente memcache más antiguo. Las características más importantes que tiene memcached son:

  1. Fichas de cas . Esto me facilitó la vida y es un sistema preventivo fácil para datos obsoletos. Cada vez que extrae algo del caché, puede recibir un token cas (un número doble). Puede usar ese token para guardar su objeto actualizado. Si nadie más actualizó el valor mientras se ejecutaba su hilo, el intercambio tendrá éxito. De lo contrario, se creó un token cas más nuevo y se ve obligado a volver a cargar los datos y guardarlos nuevamente con el nuevo token.
  2. Leer las devoluciones de llamada es lo mejor desde el pan rebanado. Ha simplificado gran parte de mi código.
  3. getDelayed () es una buena característica que puede reducir el tiempo que su script tiene que esperar a que los resultados regresen del servidor.
  4. Si bien se supone que el servidor memcached es muy estable, no es el más rápido. Puede usar el protocolo binario en lugar de ASCII con el cliente más nuevo.
  5. Cada vez que guarda datos complejos en memcached, el cliente solía hacer siempre la serialización del valor (que es lento), pero ahora con el cliente memcached tiene la opción de usar igbinary . Hasta ahora no he tenido la oportunidad de probar cuánto puede aumentar esto en rendimiento.

Todos estos puntos fueron suficientes para que me cambiara al cliente más nuevo, y puedo decirte que funciona de maravilla. Existe esa dependencia externa de la biblioteca libmemcached , pero de todos modos he podido instalarla en Ubuntu y Mac OSX, por lo que no hay problemas hasta ahora.

Si decide actualizar a la biblioteca más nueva, le sugiero que actualice a la última versión del servidor y que también tenga algunas características interesantes. Necesitará instalar libevent para que se compile, pero en Ubuntu no fue un gran problema.

No he visto ningún framework que recoja el nuevo cliente memcached hasta ahora (aunque no los sigo), pero supongo que Zend se incorporará en breve.

ACTUALIZAR

Zend Framework 2 tiene un adaptador para Memcached que se puede encontrar aquí

Miha Hribar
fuente
1
Excelente respuesta; Además, la dependencia externa de libmemcached es en realidad una ventaja, en este caso, ya que es uno de los clientes más desarrollados activamente.
Marc Bollinger
Convenido. La dependencia externa libmemcached no debe considerarse un problema en absoluto, al igual que libevent.
Miha Hribar
1
Esa cosa de Cas Tokens suena como la mayor ventaja. En realidad, al mirar estas características, casi parece que memcached se dirige más a un titular de datos administrado, como un DB, y menos como un caché temporal.
Xeoncross
Si está buscando eso, ya tiene memcachedb ( memcachedb.org ), que en realidad es solo un Berkley DB que habla el protocolo memcached.
Miha Hribar
8
¿Esta respuesta ni siquiera dice la diferencia entre memcache y memcached? ¿memcache es solo la versión anterior de memcached?
Daniel W.
10

Cuando se usa Windows, la comparación se acorta: memcacheparece ser el único cliente disponible.

rymo
fuente
¿No podrías agregar siempre la memcachedextensión en ti?
Pacerier
1
No parece que esto sea realmente cierto. commaster.net/content/installing-memcached-windows
Joe Leonard
@JoeLeonard desde la página a la que enlaza: "Para interactuar con memcachedPHP, debe instalar la memcacheextensión para PHP"
rymo
8

Esto es 2013. Olvídate de los comentarios de 2009. Del mismo modo, si está ejecutando cargas de tráfico serias, ni siquiera contemple cómo hacerlo con una memoria caché basada en Windows. Cuando se trata de una escala muy grande (más de 500 servidores web front-end) y más de 20 servidores y replicantes de bases de datos back-end (mezcla mysql y mssql), una granja de servidores memcached (12 servidores en grupo) admite múltiples aplicaciones OLTP de alto volumen que responden a 25K ~ 40K mc-> recibe llamadas por segundo. Estas llamadas son aquellas que NO tienen que llegar a una base de datos.

En mi humilde opinión, este uso de memcached proporcionó ahorros serios de $$$, $$$ en CAPEX para nuevos servidores y licencias de DB, así como en contratos de soporte para grandes diseños comerciales.

Mike Trest
fuente
48
¿Cómo responde esto a la pregunta sobre las diferencias entre esas 2 implementaciones del protocolo memcache en php?
Marki555
99
Esto debería ser un comentario.
Elijah Lynn el
7

Memcached es una API más nueva, también proporciona memcached como proveedor de sesión, lo que podría ser excelente si tiene una granja de servidores.

Después de que la versión sigue siendo realmente baja 0.2 pero he usado ambos y no encontré un problema importante, así que iría a memcached ya que es nuevo.

RageZ
fuente
1
Ambos funcionan como manejadores de sesión, aunque nunca quisiera usarlos para eso. us3.php.net/manual/en/memcache.examples-overview.php
Xeoncross
bueno, atrapa mi mal, sí, solo es realmente útil en un servidor grande cuando io se vuelve realmente importante, además, memcache no valida que no dejará caer algún objeto para obtener memoria tan difícil de saber cómo escalar las cosas.
RageZ
1
La versión 0.2 ha sido superada por una versión 1.0.0 estable.
Miha Hribar