¿Memcached es un dinosaurio en comparación con Redis? [cerrado]

185

He trabajado bastante con memcached las últimas semanas y me acabo de enterar de Redis. Cuando leí esta parte de su archivo Léame, de repente tuve una sensación cálida y acogedora en el estómago:

Redis se puede usar como memcached en esteroides porque es tan rápido como memcached pero con una serie de características más. Al igual que Memcached, Redis también admite la configuración de tiempos de espera para las teclas para que esta clave se elimine automáticamente cuando pase una cantidad de tiempo determinada.

Esto suena asombroso. También encontré esta página con puntos de referencia: http://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

Entonces, honestamente, ¿Memcache es realmente ese viejo dinosaurio que es una mala elección desde una perspectiva de rendimiento en comparación con este recién llegado llamado Redis?

No he escuchado mucho sobre Redis anteriormente, ¡por lo tanto, el enfoque para mi pregunta!

Industrial
fuente
Lectura adicional interesante: nosql.mypopescu.com/post/519078332/memcached-on-top-of-redis
Industrial
9
este punto de referencia ruturaj realmente no merece mucha atención
dsomnus 02 de
2
Comenzamos a experimentar con Membase en el trabajo y, hasta ahora, felices. Sin embargo, venimos de Memcache, por lo que tener una caída en el reemplazo fue una buena ventaja: membase.org
jayshao
2
Redis es tan rápido como memcached para puntos de referencia ideados que no son del mundo real. Eso no quiere decir que sea lento: ciertamente es lo suficientemente rápido para la mayoría de las cargas de trabajo, pero las cosas más rápidas que memcached solo revelan errores en memcached. Casi siempre tiene un cuello de botella por hardware o un diseño deficiente de la aplicación.
Dustin
44
Me sorprende que la santidad de SO-patrol no haya cerrado esta pregunta como no apropiada y no útil.
Dogweather

Respuestas:

74

Memcache es una excelente herramienta aún y MUY confiable.

en lugar de ver este problema desde la perspectiva de quién es más rápido en el rango de <100 ms, observe el rendimiento por "clase" del software.

  • ¿Utiliza solo ram local? -> más rápido
  • ¿Utiliza ram remoto? -> rápido
  • ¿Utiliza ram más disco duro -> oh hurm.
  • ¿Utiliza solo el disco duro -> ejecutar!
Daniel
fuente
3
No hay ninguna facilidad para manejar la replicación con memcache que yo sepa. Memcache está destinado exclusivamente a ser un caché. Si el artículo se purga / pierde, entonces necesita ser reconstruido. No he usado esto antes ni lo he evaluado, pero esto puede ser de su interés. code.google.com/p/memagent
Daniel
1
Membase admite el protocolo memcached pero también la persistencia y la replicación.
Jim Ferrans
1
Recientemente vi Ethernet unida, a través de 4 puertos. 4 x 44MB / s. Esto hace que el carnero sea aún más valioso, ¡suponiendo que pueda poner en marcha un enlace de ethernet!
Daniel
1
En aras de futuras referencias, mcrouter de código abierto de Facebook recientemente, que agrega replicación a memcached. Otras cosas también están anticuadas (redis es súper rápido ahora, etc.), pero para tu información si estás aquí cinco años después ...
dannysauer
bueno cual es el punto? ambos no pueden almacenar una simple matriz json directamente, el formato de intercambio de DATOS más utilizado en la web, no tengo idea de lo que estaban pensando ... oh, espera, tal vez debería agregar ReJSON porque nativamente a nadie le importa JSON en el mundo correcto
PirateApp
205

Depende de lo que necesites, en general creo que:

  • No debes preocuparte demasiado por las actuaciones. Redis es más rápido por núcleo con valores pequeños, pero memcached puede usar múltiples núcleos con un solo puerto ejecutable y TCP sin la ayuda del cliente. También memcached es más rápido con grandes valores del orden de 100k. Redis recientemente mejoró mucho acerca de los grandes valores (rama inestable) pero aún así Memcached es más rápido en este caso de uso. El punto aquí es: ni uno u otro será su cuello de botella para la consulta por segundo que pueden entregar.
  • Debes preocuparte por el uso de la memoria. Para pares clave-valor simples, memcached es más eficiente en memoria. Si usa hash de Redis, Redis es más eficiente en la memoria. Depende del caso de uso.
  • Debes preocuparte por la persistencia y la replicación, dos características que solo están disponibles en Redis. Incluso si su objetivo es construir un caché, ayuda que después de una actualización o un reinicio sus datos sigan ahí.
  • Debería preocuparse por el tipo de operaciones que necesita. En Redis hay muchas operaciones complejas, incluso teniendo en cuenta el caso de uso del almacenamiento en caché, a menudo puede hacer mucho más en una sola operación, sin requerir que se procesen los datos del lado del cliente (a veces se necesita una gran cantidad de E / S). Estas operaciones son a menudo tan rápidas como GET y SET. Entonces, si no necesita solo GET / SET sino cosas más complejas, Redis puede ayudar mucho (piense en el almacenamiento en caché de la línea de tiempo).

Sin un caso de uso es difícil elegir el en este momento, pero creo que para muchas cosas Redis tiene sentido ya que incluso cuando no quieres usarlo como DB, siendo mucho más capaz puedes resolver más problemas, no solo el almacenamiento en caché, sino incluso los mensajes, la clasificación, etc.

PD, por supuesto, podría ser parcial ya que soy el desarrollador principal del proyecto Redis.

antirez
fuente
67
+1 para una gran divulgación al final
NateDSaint
66
No estoy seguro de si esto es un error de lenguaje, pero si lideras tu argumento con "en general, creo que no deberías preocuparte demasiado por el rendimiento", eso es motivo de grave preocupación. Redis puede ser muy bueno para ciertas clases de problemas, pero, tradicionalmente, memcache se ha utilizado específicamente para resolver problemas de rendimiento con bases de datos persistentes. También creo que una omisión evidente de su lista es la madurez del producto. Memcache es un producto maduro con alrededor de una década de experiencia. Redis es prometedor, pero solo ha existido durante 3 años más o menos.
DougW
1
@DougW Estás tomando esta frase fuera de contexto. Tiene mucho más sentido cuando lees la frase que cierra el párrafo justo después: "El punto aquí es: ni uno u otro será tu cuello de botella para la consulta por segundo que pueden entregar"
Dinei,
83

Entonces, honestamente, ¿Memcache es realmente ese viejo dinosaurio que es una mala elección desde una perspectiva de rendimiento en comparación con este recién llegado llamado Redis?

  • Comparar el conjunto de características Redistiene mucha más funcionalidad;
  • Comparar la facilidad de instalación Redistambién es mucho más fácil. No se requieren dependencias;
  • Comparar el desarrollo activo Redistambién es mejor;
  • Creo que memcachedes un poco más rápido que Redis. No toca el disco en absoluto;
  • Mi opinión es que Redises mejor producto que memcached.
Alfredo
fuente
31
redis solo toca el disco si se lo indica. Por lo general, hace una sincronización cada dos segundos más o menos -> no lo notarás
Marc Seeger
1
@Marc, sí. También creo que puede decirle que no toque el disco en absoluto, pero estándar, creo que siempre es fsyncs en este momento.
Alfred
3
Además, en mi experiencia, Redis es un poco más rápido que Memcached (cuando se usa Redis en modo de solo memoria). Antirez hizo una prueba aquí antirez.com/post/redis-memcached-benchmark.html
Sune Rievers
10
GRAN DIFERENCIA: Memcached es multiproceso y Redis no. Entonces, aunque la latencia de una sola solicitud es comparable, Memcached puede atender muchas más solicitudes cuando la concurrencia es alta. Redis, por otro lado, alcanzará su máximo rendimiento con solo unas pocas solicitudes simultáneas, ya que solo utiliza 1 núcleo / subproceso de CPU. El método sugerido para evitar esto es ejecutar múltiples instancias de Redis en una máquina con hashing constante, pero esta es una solución realmente pobre. Entonces, si necesita una alta concurrencia y tiene una CPU de múltiples núcleos (quién no), Memcached es MUCHO más rápido.
ColinM
2
@Alfred, no es un hecho oculto que Redis es de un solo subproceso, es una decisión de diseño (simplicidad sobre robustez) del autor. El artículo que Dustin enlazó anteriormente es una evidencia sólida de que tiene un impacto real. También he confirmado esto en mis propios puntos de referencia usando Redis como un backend Zend_Cache; A medida que aumenta la concurrencia, Redis se estabilizará bastante rápido en comparación con Memcached.
ColinM
46

Lo que Memcached hace que Redis no hace es el desalojo de los valores de la memoria caché menos utilizado recientemente. Con memcached, puede establecer de forma segura tantos valores como desee, y cuando desborden la memoria, se eliminarán los que no haya utilizado recientemente. Con Redis, solo puede aproximarse a esto, configurando un tiempo de espera en todo; cuando necesite liberar memoria, buscará tres claves aleatorias y eliminará la que esté más cerca de caducar.

Esa es la principal diferencia, si solo lo está utilizando como caché.

Peter Scott
fuente
13

También es posible que desee ver Membase.

http://www.northscale.com/products/membase_server.html

No lo he usado, pero parece ser similar a Redis en que es una tienda KV centrada en la memoria con persistencia. Las principales diferencias con respecto a lo que puedo ver son:

  • Redis tiene significativamente más capacidad de manipulación de datos (conjuntos ordenados, etc.)
  • Redis tiene un proyecto pendiente de Redis Cluster para agregar escalabilidad horizontal
  • Redis tiene un único nivel de descarga de datos en el disco (VM) basado en un algoritmo híbrido que considera tanto la LRU como el tamaño del objeto.

  • Membase utiliza el protocolo de cable de memoria caché, útil como ruta de actualización para aplicaciones existentes

  • Membase está configurado para escalar horizontalmente utilizando un enfoque de tabla hash distribuida
  • Membase puede soportar múltiples niveles de descarga de datos usando un enfoque LRU (muy raramente usado va al disco, algo rara vez va al SSD, el material frecuente permanece en la RAM)
  • No estoy seguro acerca de la capacidad TTL en Membase.

La elección puede depender del grado en que su aplicación pueda aprovechar la funcionalidad adicional de manipulación de datos en Redis.

HikeOnPast
fuente
Hola Dean, gracias por tu publicación. Definitivamente le echaré un vistazo. ¿Puedo usar Membase en PHP?
Industrial
44
Como Membase usa el protocolo memcached, cualquiera de los clientes memcached debería funcionar: wiki.membase.org/bin/view/Main/Clients
HikeOnPast
Membase es compatible con TTL. Todas las implementaciones de Memcache son compatibles con un tiempo de vencimiento. github.com/memcached/memcached/blob/master/doc/protocol.txt#L79
Saurav