memcache vs memcached?


76

Quiero usar memcached

http://www.danga.com/memcached/

Lo he instalado a través de yum install memcached

Pero ahora necesito conectarme a PHP, ¿y hay una extensión llamada memcache y una llamada memcached? ARGH

http://us3.php.net/manual/en/book.memcache.php
http://us3.php.net/manual/en/book.memcached.php

¿Podría alguien señalarme en la dirección correcta aquí ... cuál va a funcionar?

Además, ¿debo abrir algún puerto para que funcione aunque sea local? Después de ejecutarlo, intento telnet 127.0.0.1 11211 y me niegan la conexión.


24
Si está viendo esta pregunta ahora, tenga en cuenta que la respuesta aceptada es incorrecta . Elegir una solución basada únicamente en el nombre es peligroso, particularmente cuando el que tiene el mejor nombre es un proyecto peor. Por favor, mire las otras respuestas para más información.
tylerl

@ Gracias, por favor desmarca la respuesta que has marcado. Eso confundirá a más personas que llegan tarde. Mientras tanto, rechacé la respuesta incorrecta y sugerí que otros hicieran lo mismo hasta que thanksyo pudiera desmarcarla.
joedevon

Respuestas:


24

La respuesta corta: Cualquiera de los dos es lo que está buscando, pero mi primera opción sería memcache (la primera que enumeró), basada exclusivamente en su uso correcto de la nomenclatura.

Ahora he aquí cómo llegué a esa conclusión:

Aquí hay un resumen rápido de las convenciones de nomenclatura (para aquellos que no están familiarizados), que explica la frustración del autor de la pregunta: Para muchas aplicaciones * nix, la pieza que hace el trabajo de backend se llama "demonio" (piense en "servicio" en Windows- tierra), mientras que la interfaz o la aplicación cliente es lo que usa para controlar o acceder al demonio. El demonio se suele llamar igual que el cliente, con la letra "d" adjunta. Por ejemplo, "imap" sería un cliente que se conecta al demonio "imapd".

Esta convención de nomenclatura claramente se está cumpliendo por Memcache cuando se lee la introducción al módulo de Memcache (nótese la diferencia entre Memcache y memcached en este extracto):

El módulo Memcache proporciona una práctica interfaz orientada a procedimientos y objetos para el demonio de almacenamiento en caché altamente efectivo y memcached, que fue especialmente diseñado para disminuir la carga de la base de datos en aplicaciones web dinámicas.

El módulo Memcache también proporciona un controlador de sesión (memcache).

Puede encontrar más información sobre memcached en » http://www.danga.com/memcached/ .

La frustración aquí es causada por el autor de la extensión PHP que fue mal llamada memcached , ya que comparte el mismo nombre que el demonio real llamado memcached . Observe también que en la introducción a memcached (el módulo php) , hace mención de libmemcached , que es la biblioteca compartida (o API) que utiliza el módulo para acceder al demonio memcached:

memcached es un sistema de almacenamiento en caché de objetos de memoria distribuida de alto rendimiento, de naturaleza genérica, pero diseñado para acelerar las aplicaciones web dinámicas aliviando la carga de la base de datos.

Esta extensión utiliza la biblioteca libmemcached para proporcionar API para comunicarse con servidores memcached. También proporciona un controlador de sesión (memcached).

Puede encontrar información sobre libmemcached en » http://tangent.org/552/libmemcached.html .

En resumen, ambos son funcionalmente iguales, pero simplemente tienen autores diferentes, y el nombre de uno es más apropiado que el otro.


70
¿Es el nombre del proyecto realmente una razón apropiada para elegir una implementación sobre la otra?
David Pashley

44
David: No del todo ... pero sin duda es una razón suficiente para dejar una implementación particular hasta el final de mis pruebas, dando así preferencia efectiva a las otras. Lo más probable es que aún pruebe todas las implementaciones disponibles, pero las fallas técnicas en las descripciones del software por parte del autor tienden a hacerme preguntar sobre qué fallas técnicas pueden existir en el software. Sin embargo, leí tu comentario sobre el software real, así que también te di un voto positivo por tu respuesta. :-)
Jessica McKinnon

44
Nunca pensé que la "d" en memcached significara demonio sino el participio pasado del verbo cache. Además, no puede nombrar la nueva interfaz como "memcache" ya que ya había una con ese nombre.
GetFree

99
La cantidad de errores y si la extensión se desarrolla activamente o no es mucho más importante que ser anal sobre la problemática d. En serio, ni siquiera deberías pensar en probar una extensión por última vez debido a algo así, está completamente fuera de lugar
Fake51

12
Erm, ambos no son funcionalmente iguales: memcachedadmite tokens cas, por ejemplo, memcacheno. Si los necesita, sabe qué (mal nombrado o no) elegir.
Escrito el

56

Probablemente quiera ver la comparación de clientes PHP .

Versión corta: ambos funcionarán y, en la mayoría de los casos, a cualquiera de ellos le irá bien.

Con respecto al otro tema: Sí, debería poder hacerlo telnet 127.0.0.1 11211. Muy pocos cortafuegos impedirían que localhost se comunique consigo mismo. Si no puede conectarse, verifique que memcached realmente se esté ejecutando ps auxwww | grep memcached, lo que también le mostrará los argumentos de la línea de comandos utilizados para iniciar memcached. Uno de los argumentos debe ser -p 11211u otro número de puerto. Vea man memcachedel significado de todos los argumentos posibles.


2
Voto a favor para agregar algunos pasos de solución de problemas.
Jessica McKinnon

Esta es realmente la respuesta clara.
danidacar

@Nate, ¿cuál es el equivalente de Windows ps auxwww | grep memcached?
Pacerier

1
@Pacerier: Echa un vistazo a superuser.com/questions/415360/… . Process Explorer es la forma más fácil de encontrar un proceso en ejecución y ver sus argumentos de línea de comandos.
Nate

@Pacerier ese comando que comprueba si el proceso del servidor se está ejecutando y ve cómo se invocó.
Jasen

27

Como sugiere el enlace de Nate, ambos funcionan perfectamente bien para un uso simple. Sin embargo, memcached admite más funciones que le permiten obtener el máximo rendimiento de memcached. El protocolo binario reduce la cantidad de datos necesarios para ser enviados entre el cliente y el servidor. Multigets y multisets le permiten obtener / configurar múltiples elementos al mismo tiempo. Si descubres que necesitas más empuje de memcache, memcached es el mejor módulo. El uso de libmemcached sugiere que la biblioteca en sí misma posiblemente esté más optimizada que la versión solo de PHP.

Memcached es un módulo más reciente en comparación con memcache, que solo se lanzó hace 8 meses. Si necesita apuntar a una versión anterior de PHP, entonces solo puede usar memcache.


¡Gran explicación!
John

21

Se llama php-memcacheal más viejo y con errores porque parecía el nombre más apropiado. La versión más nueva y mejor desarrollada independientemente por la gente de Digg fue nombrada php-memcacheden cambio en interés de la desambiguación.

Las personas que recomendarían elegir uno sobre el otro basándose únicamente en la exactitud del nombre realmente no tienen por qué ofrecer asesoramiento técnico.


6

Habiendo usado php-memcache recientemente, tendría que señalarle php-memcached.

Aquí hay un par de razones fuera de mi cabeza ...

1) No hay getErrorCode () o un método equivalente, por lo que si get () devuelve FALSE, no tendrá idea de si eso se debe a que el valor almacenado en memcache es falso o si hubo algún tipo de problema.

2) Su algoritmo de hash para hashing consistente parece diferir de otras implementaciones, como las muchas bibliotecas de clientes creadas a partir de libmemcached. Esto significa que si desea utilizar el mismo clúster de memcache con varios idiomas, es probable que tenga problemas en los que almacenará un valor con el cliente PHP y otros clientes no lo encontrarán.


3

Ambos tienen problemas a partir de hoy. PECL / memcache es antiguo y confiable, con algunas excepciones donde está desactualizado. PECL / memcached 1.x es beta en el mejor de los casos. Algunas funciones no se ocupan de teclas numéricas, pierden conexiones cuando se usan conexiones persistentes. Algunos (¿todos?) Se están arreglando en GitHub y se lanzarán en algún momento en 2.x, pero no hoy. Para una revisión más detallada ver http://brian.moonspot.net/php-memcached-issues


PECL / memcached 1.x ahora es estable; PECL / memcache 2.x es limitado; PECL / memcache 3.x es altamente inestable.
aredridel

2

Estoy trabajando en un libro "Expert PHP and MySQL". Escribí casi lo mismo sobre las diferencias. Lo que recomendé fue PECL / memcached. # 1 - se envuelve alrededor de una biblioteca C de alto rendimiento con todas las funciones # 2 - se mantiene más recientemente. # 3 - más características. Sin menosprecio a PECL / memcache.


0

He tenido algunos problemas bastante graves con Drupal 6 y php-pecl-memcached en los que los tiempos de respuesta se retrasaron hasta 5 ms por llamada y provocarían que un sitio en particular creara 5 veces más llamadas que antes del cambio a php-pecl-memcached . Cambiar a php-pecl-memcache solucionó todos los problemas; latencia y llamadas adicionales.

Esta respuesta está aquí únicamente para ayudar a aquellos que usan Drupal 6 y posiblemente Drupal 7.


-3
  • memcache es un cliente de memcached (el servidor)
  • libmemcached también es un cliente para memcached

Y hay otros clientes para memcached, consulte http://code.google.com/p/memcached/wiki/Clients

Cortar y pegar desde la web:

http://www.php.net/manual/en/intro.memcache.php

  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 

http://www.php.net/manual/en/intro.memcached.php

   » 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

http://pecl.php.net/package/memcached "Extensión PHP para interactuar con memcached a través de la biblioteca libmemcached" Esta extensión usa la biblioteca libmemcached para proporcionar API para comunicarse con los servidores memcached. https://github.com/andreiz/php-memcached

http://pecl.php.net/package/memcache "memcached extension" Memcached es un demonio de caché diseñado especialmente para aplicaciones web dinámicas para disminuir la carga de la base de datos almacenando objetos en la memoria. Esta extensión le permite trabajar con memcached a través de prácticas interfaces de procedimiento y OO.

http://code.google.com/p/memcached/wiki/PHPClientComparison

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

66
Esta larga respuesta ni siquiera se acerca a dejar las cosas claras para el póster. El cartel ya sabe que hay varios clientes. Enumerarlos y proponer nombres alternativos no hace que sea más fácil elegir el correcto.
Martijn Heemels
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.