sql >> Base de Datos >  >> NoSQL >> Redis

Redis vs. Memcached:comparación de 2021

Redis significa RE mote DI cionario S Everver, creado en 2009 por Salvatore Sanfilippo. Memcached, por otro lado, fue creado en 2003 por Brad Fitzpatrick. Tanto Redis como Memcached son:

  • Estructuras de datos en memoria NoSQL
  • Escrito en C
  • Código abierto
  • Se utiliza para acelerar las aplicaciones
  • Admite latencia de submilisegundos

En 2014, Salvatore escribió una excelente publicación de StackOverflow sobre cuándo tiene más sentido usar Memcached que Redis. En esta publicación, proporcionamos una comparación actual y detallada entre Redis y Memcached para que pueda tomar una decisión informada sobre su uso en su aplicación.

Infografía

Esta publicación se ha condensado en la siguiente infografía. Con esta infografía, puede visualizar fácilmente los resultados de esta comparación para ver cuál sale mejor en diferentes escenarios. Si desea leer la comparación en formato de texto, haga clic aquí.

Documentación

Para empezar, Redis está mucho más documentado que Memcached. Esto hace que sea más fácil de aprender, administrar y usar.

Modelo de base de datos

Redis es principalmente un almacén de valor clave. Si bien las claves son cadenas binarias, la ventaja de Redis es que el valor no se limita solo a cadenas binarias. Pueden ser una variedad de estructuras de datos que permiten el almacenamiento de objetos complejos y proporcionan un amplio conjunto de operaciones sobre ellos. Redis también proporciona extensibilidad a través de módulos de Redis. Los módulos de Redis son extensiones que proporcionan estructuras de datos y funciones adicionales que no están disponibles en el conjunto de funciones principales. Aquí hay una muestra de algunas funciones que ahora están disponibles como módulos:

  • Tienda de documentos
  • Graficar DBMS
  • Motor de búsqueda
  • SGBD de serie temporal

Memcached es un almacén de valor de clave simple que solo admite cadenas binarias como valor.

Estructuras de datos

Como se mencionó anteriormente, Redis ofrece múltiples tipos de estructuras de datos que le permiten ser extremadamente flexible de usar, incluidas cadenas, hash, listas, conjuntos, conjuntos ordenados, mapas de bits, campos de bits, HyperLogLog, Índices geoespaciales y Streams. Puede obtener más información sobre estos en este artículo Principales casos de uso de Redis por tipos de estructuras de datos principales.

Fuente de la imagen:https://redislabs.com/redis-enterprise/data-structures/

Memcached solo admite cadenas binarias simples que son excelentes para datos de solo lectura, por lo que si no necesita todas las campanas y silbatos de Redis, Memcached es una base de datos más simple para usted usar.

Clasificación de la base de datos y popularidad

La mayor popularidad de una base de datos da como resultado una comunidad de usuarios más grande, más debates y tutoriales generados por los usuarios, y más ayuda y soporte a través de herramientas de terceros, como plataformas DBaaS y herramientas de análisis para ayudar a optimizar sus implementaciones.

Redis es la octava base de datos más popular del mundo a partir de febrero de 2021, según DB-Engines debido a su simplicidad, ricas estructuras de datos y excelente documentación. Memcached se encuentra actualmente en el puesto 28 de la base de datos más popular. Cuando Redis y Memcached se clasifican con respecto a los modelos de bases de datos de valores clave, Redis ocupa el primer lugar y Memcached el cuarto. Sin embargo, si solo busca una base de datos de clave-valor de código abierto, o una que se pueda implementar localmente, Memcached ocupa el segundo lugar, ya que tanto Amazon DynamoDB como Microsoft Azure Cosmos DB son bases de datos comerciales que solo se pueden implementar en la nube.

Arquitectura

Redis y Memcached siguen cliente-servidor arquitectura. Los clientes rellenan los datos en el servidor en forma de clave-valor.

Redis es de un solo subproceso mientras que, por otro lado, Memcached tiene una arquitectura de subprocesos múltiples. Memcached escala mejor en un sistema con más núcleos que pueden manejar más operaciones si se escala la capacidad informática. Sin embargo, se puede iniciar más de una instancia de Redis en el mismo sistema para utilizar núcleos adicionales.

Facilidad de uso

Como se explicó anteriormente en la sección Modelo de base de datos, Redis, al ser una base de datos multimodelo, se puede usar con cualquier tipo de modelo de datos. En Redis, es fácil escribir código, ya que simplifica tareas complejas. Redis tiene estructuras de datos avanzadas y no se limita a valores de cadena simples. Por ejemplo, si su aplicación almacena datos en conjuntos y desea realizar un seguimiento de los conjuntos en una lista, puede hacerlo fácilmente en Redis. Una tarea similar en Memcached no es posible. Pero hay otras formas de hacer las mismas tareas que requerirán más líneas de código.

Memcached, por otro lado, solo almacena valores de cadena sin formato. Por lo tanto, se deja que la aplicación se ocupe de la complejidad de la estructura de datos.

Particionamiento de datos

Redis admite la partición de datos en varias instancias de nodos. Los usuarios actuales de Redis aprovechan diferentes técnicas como el particionamiento por rango, el particionamiento hash y el hash consistente para el particionamiento de datos. En Redis, la partición de datos se puede implementar de tres maneras diferentes:

  • Particionamiento del lado del cliente
  • Particionamiento asistido por proxy (ejemplo:twemproxy)
  • Particionamiento del lado del servidor con enrutamiento de consultas dentro de los nodos del clúster

Memcached también admite la partición de datos en varios nodos, y se recomienda un método hash consistente para garantizar que la carga de tráfico se distribuya de manera uniforme.

Redis vs Memcached:comparación de 2021Haga clic para twittear

Idiomas admitidos

Redis es compatible con casi todos los lenguajes de programación más utilizados, desde lenguajes de alto nivel hasta lenguajes de bajo nivel. Sin embargo, Memcached admite una menor cantidad de idiomas en comparación con Redis, pero admite todos los idiomas populares.

Memcached

  • .Net
  • C
  • C++
  • Fusión fría
  • Erlang
  • Java
  • ceceo
  • Lua
  • OCaml
  • Perl
  • PHP
  • Pitón
  • Rubí

Redis

  • C
  • C#
  • C++
  • Clojure
  • Cristal
  • D
  • Dardo
  • Elixir
  • Erlang
  • Fantasía
  • Ir
  • Haskell
  • Haxe
  • Java
  • JavaScript (Node.js)
  • ceceo
  • Lua
  • MatLab
  • Objetivo-C
  • OCaml
  • Pascal
  • Perl
  • PHP
  • Prólogo
  • Datos puros
  • Pitón
  • R
  • Rebol
  • Rubí
  • Óxido
  • Escala
  • Esquema
  • Pequeñas conversaciones
  • Rápido
  • Tcl
  • Visual Basic

Transacciones

Las "transacciones" de Redis se ejecutan con las tres garantías siguientes:

  • Las transacciones se serializan y ejecutan secuencialmente
  • Se procesan todos los comandos o ninguno (transacciones atómicas)
  • El bloqueo optimista ofrece una garantía adicional mediante la verificación y configuración

Redis se asegura de que se ejecute a la vez un solo comando de una máquina cliente. Todos los comandos en las transacciones se ejecutan cuando se llama al comando "EXEC" para garantizar la atomicidad.

Memcached, por otro lado, no proporciona administración de transacciones.

Replicación

Redis ofrece una replicación líder-seguidor (maestro-esclavo) simple que crea copias exactas de las instancias maestras, con estas características:

  • El maestro continúa enviando comandos de datos al esclavo mientras estén conectados.
  • Si la conexión se interrumpe, el esclavo seguirá una resincronización parcial y solo copiará los datos que se perdieron durante la desconexión.
  • Si la resincronización parcial no es posible, intentará una resincronización completa.

También puede aprovechar las características de alta disponibilidad, Redis Sentinels o Redis Cluster, para una protección avanzada de conmutación por error.

Native Memcached no admite la replicación, pero puede usar Repcached, un parche gratuito de código abierto para lograr una alta disponibilidad para su implementación. Ofrece replicación multimaestro, replicación de datos asíncrona y es compatible con todos los comandos de Memcached.

Instantáneas/Persistencia

Las instantáneas son simplemente una vista de solo lectura de su base de datos tal como era en un momento determinado. Redis admite instantáneas y, de forma predeterminada, Redis guarda instantáneas del conjunto de datos en el disco en un archivo binario llamado dump.rdb. Puede llamar manualmente a una instantánea o personalizar la frecuencia o cambiar el umbral para ejecutar la operación.

Estas son las dos opciones de persistencia que admite Redis:

  • Persistencia de RDB
  • Persistencia de AOF

RDB significa "Copia de seguridad de la base de datos de Redis". Es una instantánea compacta y puntual de la base de datos en un momento específico. Ocupa menos espacio, maximiza el rendimiento de Redis y es bueno para la recuperación ante desastres.

AOF significa "Agregar solo archivo". AOF realiza un seguimiento de todos los comandos que se ejecutan y, en una situación desastrosa, vuelve a ejecutar los comandos para recuperar los datos. Este método ocupa más espacio, ya que todos los comandos se ejecutan de nuevo, y no es un método muy duradero de creación de instantáneas.

Memcached, por otro lado, no es compatible con la persistencia en disco.

Scripts del lado del servidor

Lua es el lenguaje de secuencias de comandos incorporado para su servidor Redis, disponible a partir de la versión 2.6, que le permite realizar operaciones dentro de Redis para simplificar su código y aumentar el rendimiento. Las dos funciones principales que se utilizan para evaluar scripts mediante el intérprete de Lua son:

  • EVALUAR
  • EVALSHA

Cuando se ejecuta el script Lua, todas las demás solicitudes se bloquean como se muestra en la figura a continuación.

Redis también incluye el depurador de secuencias de comandos Lua en la versión 3.2, que facilita la escritura de secuencias de comandos complejas y ayuda a mejorar el rendimiento.

Memcached no admite secuencias de comandos del lado del servidor.

Escalabilidad

Hay dos técnicas para escalar horizontalmente su base de datos de Redis:

  • Agregar fragmentos en Redis Clusters
  • Agregar nodos a una configuración Redis HA (maestro/réplica)

También puede escalar verticalmente su configuración de Redis cuando necesite más memoria o cómputo. Se puede hacer sin tiempo de inactividad si tiene una configuración de alta disponibilidad o si usa la tecnología Redis Cluster.

El servidor Memcached no proporciona un mecanismo para distribuir datos entre nodos (fragmentación). Entonces, en Memcached, la escalabilidad horizontal es tan simple como agregar más nodos:el problema de particionar sus datos en diferentes fragmentos tendrá que hacerse en el nivel de aplicación/cliente. Hay algunas herramientas de código abierto que pueden ayudarte con esto.

Protocolo de comunicación

Redis usa TCP como protocolo de red y no es compatible con UDP.

Memcached admite los protocolos de comunicación TCP y UDP. Los datos se envían al servidor de Memcached de dos formas:

  • Líneas de texto:envía comandos y recibe respuestas del servidor.
  • Datos no estructurados:recibe o envía información de valor para una clave determinada y los datos se devuelven en el mismo formato provisto.

Políticas de desalojo de caché admitidas

Redis admite diferentes tipos de políticas de desalojo. Echemos un vistazo a algunos.

  • no desalojo:  En "noeviction" se devuelve un error cuando la memoria llega a su límite.
  • todas las teclas-lru:  Lru significa "usado menos reciente". Esta política elimina los datos utilizados menos recientemente.
  • todas las teclas-lfu:  Lfu significa "usado con menos frecuencia". Esta política elimina los datos usados ​​con menos frecuencia.
  • todas las teclas aleatorias:  Esta política elimina los datos aleatoriamente.
  • volátil-lru:  Los datos volátiles tienen un conjunto de datos de vencimiento. Esta política elimina los datos volátiles utilizados menos recientemente.
  • volátil-lfu:  Los datos volátiles tienen un conjunto de datos de vencimiento. Esta política elimina los datos volátiles menos utilizados.
  • volátil-aleatorio:  Esta política elimina los datos volátiles de forma aleatoria.
  • volátil-ttl:  “TTL” significa tiempo de vida. Esta política elimina los datos que tienen menos tiempo de vida.

Memcached usa el algoritmo LRU para desalojar datos cuando se requiere espacio. Primero busca los datos ya vencidos para eliminarlos, si los datos vencidos no están disponibles, se utiliza el algoritmo LRU.

Mensajes de publicación y suscripción

Redis es compatible con la mensajería Pub/Sub (publicar y suscribirse). Hay tres comandos que se utilizan para este propósito.

El cliente usa:

  • Suscribirse
  • Cancelar suscripción

Suscribirse y darse de baja se utilizan para recibir mensajes de un canal específico.

El servidor usa:

  • Publicar

La "publicación" se utiliza para enviar datos a los clientes.

Memcached no admite mensajes de publicación y suscripción.

Soporte de transmisiones

Redis admite flujos similares a Kafka con la versión 5.0 o superior mediante una nueva estructura de datos "Redis Streams". Redis Streams tiene el concepto de grupos de consumidores, como Apache Kafka, que permite que las aplicaciones cliente consuman mensajes de forma distribuida, lo que facilita la escalabilidad y la creación de sistemas de alta disponibilidad.

Memcached no ofrece soporte nativo para Streams, pero existen herramientas de biblioteca de código abierto como Kafcache para el procesamiento de flujos con baja latencia.

Apoyo geoespacial

Redis tiene una estructura de datos denominada índices geoespaciales que almacena los datos de longitud y latitud de una ubicación. Puedes realizar diferentes operaciones sobre los datos geoespaciales, como calcular la distancia entre dos puntos o encontrar lugares cercanos.

Memcached no tiene estructuras de datos especiales para manejar datos geoespaciales.

Rendimiento

Una comparación de rendimiento entre almacenes de datos clave-valor en memoria es más un ejercicio intelectual que de importancia práctica, a menos que esté implementando sistemas a tal escala que esto se vuelve interesante como una medida de ahorro de costes. Esto se debe a que dichos almacenes están vinculados a E/S y, por lo general, la latencia de la red puede desempeñar un papel más importante en la latencia percibida por la aplicación que la latencia de la base de datos.

Un aspecto de rendimiento más práctico es la eficiencia del almacenamiento:cuántos datos se pueden empaquetar en la misma cantidad de memoria. Incluso aquí, las estructuras de datos internas utilizadas por Redis varían según el tamaño de los datos. Por lo tanto, cualquier discusión sobre el rendimiento entre estas bases de datos debe tomarse con pinzas.

Echemos un vistazo a algunas comparaciones que se muestran en un trabajo de investigación de 2016. En este artículo, los autores experimentan con las bases de datos en memoria ampliamente utilizadas para medir su desempeño en términos de:

  1. El tiempo necesario para completar las operaciones.
  2. Cuán eficientemente utilizan la memoria durante las operaciones.

Versiones de bases de datos utilizadas en el artículo:

Base de datos Versión
Redis 3.0.7
Memcached 1.4.14

Operación de escritura

Mientras escribe datos, como puede ver, en la siguiente tabla, Memcached muestra una velocidad excepcional incluso después de que la cantidad de registros sube a un millón.

El tiempo calculado para escribir pares clave-valor (ms)

Número de registros
Base de datos 1000 10,000 100.000 1,000,000
Redis 34 214 1,666 14,638
Memcached 23 100 276 2813

Operación de lectura

La lectura de datos se mantiene casi constante en Redis incluso para un millón de registros, pero en Memcached, a medida que aumenta la cantidad de registros, el tiempo también aumenta un poco.

El tiempo transcurrido para leer el valor correspondiente a una clave determinada por base de datos (ms)

Número de registros
Base de datos 1000 10,000 100.000 1,000,000
Redis 8 6 8 8
Memcached 9 14 14 30

Uso de memoria

Al hablar sobre el uso de la memoria, Redis siempre es el mejor, como puede ver en los resultados.

Usos de memoria de bases de datos en memoria para operaciones de escritura (MB)

Número de registros
Base de datos 1000 10,000 100.000 1,000,000
Redis 2.5 3.8 4.3 62.7
Memcached 5.3 27.2 211 264.9

Como puede ver, Redis es mejor que Memcached.

Usos de memoria de las bases de datos en memoria para la operación de eliminación (MB)

Número de registros
Base de datos 1000 10,000 100.000 1,000,000
Redis 0 0 0 0
Memcached 2.2 2.1 2.2 2.2

Servicios gestionados/Soporte

La mayor popularidad y comunidad de Redis también ha impulsado la necesidad de servicios administrados, alojamiento y soporte. Los proveedores de bases de datos administradas populares para Redis™* incluyen ScaleGrid, Redis Labs, AWS Elasticache, Azure Cache y DigitalOcean. Esta página ofrece una excelente comparación de los principales proveedores de Redis™. Redis también cuenta con amplias herramientas de generación de informes internos, como aciertos de caché, uso de memoria, operaciones e incluso una consulta lenta registrada.

Los servicios administrados para Memcached están mucho menos disponibles, pero aún son compatibles a través de Amazon Elasticache.

Compatibilidad con seguridad de la capa de transporte (TLS)

Redis es compatible con TLS nativo a partir de Redis 6.0. Las versiones anteriores de Redis recomendaban el uso de stunnel para brindar compatibilidad con TLS.

Memcached 1.5.13 y versiones posteriores admiten autenticación y encriptación a través de TLS. Esta función aún se encuentra en etapas experimentales.

Autenticación

Hasta Redis 5.x, Redis solo admitía una autenticación simple basada en contraseña. Esta contraseña se almacenó en texto sin formato en el servidor. Redis en la versión 6.0 en adelante admite una ACL con todas las funciones.

La versión 1.4.3 y posteriores de Memcached son compatibles con SASL. Anteriormente, Memcached no tenía una capa de autenticación.

Resumen

Redis y Memcached son geniales y tienen aplicaciones en diferentes áreas. Redis, que se está desarrollando más tarde, tiene muchas funcionalidades avanzadas y tiene una excelente documentación y comunidad.

¿Interesado en aprender más sobre ScaleGrid?

Para obtener más información sobre cómo ScaleGrid Hosting for Redis™* puede ayudarlo a administrar sus bases de datos, consulte nuestra página ScaleGrid Service for Redis™. Vea cómo el alojamiento de ScaleGrid para Redis™ puede permitirle concentrarse más en desarrollar su producto y menos en administrar bases de datos.

*Redis es una marca comercial de Redis Labs Ltd. Cualquier derecho sobre la misma está reservado a Redis Labs Ltd. Cualquier uso por parte de ScaleGrid es solo para fines de referencia y no indica ningún patrocinio, respaldo o afiliación entre Redis y ScaleGrid.