Memcached vs. Redis: comparativa de las bases de datos en memoria

Utilizando bases de datos en memoria como Memcached y Redis aumenta considerablemente el rendimiento de las aplicaciones dinámicas y de alto rendimiento vinculadas a una base de datos. Ambas soluciones son de código abierto y funcionan bajo principios similares. No obstante, existen algunas diferencias entre ambas cachés que merece la pena conocer de antemano, especialmente en lo relativo a funciones y ámbitos de uso.

Mientras que Memcached se orienta principalmente a la simplicidad, Redis ofrece una amplia gama de funciones adicionales que pueden serte útiles o superfluas, dependiendo de la aplicación que utilices. Descubre qué tienen en común y en qué se diferencian ambas soluciones de almacenaje de datos en memoria.

Breve introducción a Memcached y Redis

Mientras que Memcached se lanzó hace casi 20 años, Redis salió al mercado unos siete años después. En aquel momento, los desarrolladores de Memcached tenían el objetivo de evitar la ralentización provocada por el acceso a las bases de datos, necesarias cuando se utilizan aplicaciones web sofisticadas. Fue todo un éxito: Memcached (nombre que proviene de in-memory cache service) proporciona elementos guardados en caché con la ayuda de valores clave a la velocidad de la luz, volviendo innecesario el acceso al disco duro. La base de datos en memoria Redis (de remote dictionary server), tiene una estructura de clave-valor similar y, al igual que Memcached, se utiliza en ámbitos como los sitios web, los videojuegos y el eCommerce.

¿Qué tienen en común?

Las bases de datos en memoria de Memcached y Redis leen los datos a una velocidad muy elevada, lo que logra reducir el tiempo de respuesta al rango de los milisegundos. Ambos sistemas son fáciles de utilizar a nivel sintáctico y pueden incorporarse a las aplicaciones sin necesidad de código complejo. Además, Memcached y Redis permiten que los datos se distribuyan en varios nodos, lo que facilita la escalabilidad a medida que aumenta el volumen de datos. Por otra parte, ambas soluciones de código abierto son compatibles con gran variedad de protocolos y lenguajes de programación, como Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby y Go.

Memcached vs. Redis: ¿en qué se diferencian?

Aunque Memchached y Redis tienen mucho en común, también existen algunas diferencias entre ellos. A continuación, te presentamos las más importantes:

Arquitectura: Memcached funciona según el principio del multihilo y puede utilizar varios núcleos de proceso a la vez. En cambio, Redis utiliza un solo núcleo, lo que significa que el motor rinde mejor con pequeñas cantidades de datos. Cuando se trata de almacenar grandes cantidades de datos, Memcached le lleva ventaja.

Tipos de datos: Memcached solo puede gestionar cadenas de caracteres simples o strings de hasta 1 MB. Redis, por su parte, admite cadenas de hasta 512 MB, así como estructuras de datos más complejas, como listas, hashes, flujos, conjuntos, conjuntos ordenados, mapas de bits e HyperLogLogs. Redis también puede medir y guardar datos geográficos.

Persistencia de datos: Redis no es un sistema de almacenamiento en memoria puro como Memcached. Cuando el servidor de Memcached se queda sin espacio para nuevos elementos, los datos menos solicitados se eliminan automáticamente. También se pierden si falla una instancia de Memcached. En Redis, los datos pueden restaurarse gracias a la función Snapshot o el modo AOF (append only file). Sin embargo, este último puede conllevar una leve bajada de rendimiento y consiguiente ralentización.

Gestión de clústeres: con Redis, los datos no solo se distribuyen en el lado del cliente, como con Memcached, sino también en el lado del servidor. Los nodos del clúster de Redis pueden intercambiar datos entre sí. Si un subconjunto de nodos falla, esto tiene poco o ningún efecto en los tiempos de respuesta. En Memcached, sin embargo, tal intercambio de datos no es posible.

Transacciones: ambos sistemas de almacenamiento en memoria utilizan comandos atómicos, lo que significa que los valores introducidos se muestran inmediatamente en el lado del cliente conectado. Sin embargo, a diferencia de Memcached, Redis también puede ejecutar comandos de grupo en forma de procesos atómicos aislados. Esta función de Redis se denomina pipelining (canalización) y garantiza que Redis pueda responder a varios comandos al mismo tiempo.

Pub/Sub: Redis es compatible con la arquitectura Pub/Sub, un servicio de mensajería que permite que las aplicaciones se comuniquen entre sí de manera eficiente. Esta función se utiliza en salas de chat de alto rendimiento, comunicación de streaming en vivo, feeds de redes sociales y comunicación entre diferentes servidores.

Secuencias de comandos Lua: si Redis debe realizar cálculos complejos, los desarrolladores tienen la posibilidad de utilizar secuencias de comandos Lua. En este script ligero se puede incorporar una nueva lógica sin mucho esfuerzo, lo que aumenta el rendimiento y facilita el uso.

Memcached vs. Redis: tabla comparativa

Memcached Redis
Fácil de instalar y utilizar Fácil de instalar y utilizar
Latencia en el rango de milisegundos Latencia en el rango de milisegundos
Código abierto y compatible con los lenguajes de programación habituales Código abierto y compatible con los lenguajes de programación habituales
Motor multihilo ideal para grandes cantidades de datos Motor de subproceso único ideal para cantidades de datos más pequeñas
Escalabilidad vertical Escalabilidad vertical y horizontal (ver el apartado sobre la gestión de clústeres)
Longitud de clave limitada a 250 caracteres (1 MB) Compatibilidad con muchos tipos de datos (hasta 512 MB)
Almacenamiento en memoria puro sin persistencia de datos ni protección contra fallos Restauración de datos mediante Snapshot, AOF y almacenamiento en un disco duro de respaldo
Ideal para almacenar en caché y guardar datos de sesión Ideal para procesos complejos y múltiples procedimientos que deben ejecutarse simultáneamente

En resumen

Memcached y Redis son dos sistemas de almacenamiento de datos en memoria bien diseñados, que se diferencian sobre todo en los aspectos relacionados con la compatibilidad con formatos de datos, la gestión de clústeres, la administración de la memoria y la persistencia de los datos. La respuesta a cuál de los dos motores es el más adecuado dependerá de cada aplicación. Si ya utilizas Memcached y no te hace falta ninguna otra función, quizás no merezca la pena que te pases a Redis. Sin embargo, si necesitas más funciones y quieres proteger mejor los datos, Redis es una buena alternativa.

¿Le ha resultado útil este artículo?
Page top