Redis (Remote Dictionary Server) es una base de datos clave-valor en memoria, utilizada como caché distribuida y intermediario de mensajes, con durabilidad opcional. Debido a que almacena todos los datos en memoria y por su diseño, Redis ofrece lecturas y escrituras de baja latencia, lo que lo hace especialmente adecuado para casos de uso que requieren una caché. El proyecto fue desarrollado y mantenido por Salvatore Sanfilippo, comenzando en 2009, y ha evolucionado a través de múltiples patrocinios y cambios de licencia hasta convertirse en un componente de infraestructura de datos ampliamente adoptado.
Redis funciona tanto como almacén de datos como caché, distinguiéndose de los sistemas tradicionales de gestión de bases de datos relacionales (RDBMS). Su modelo de datos se basa en tipos de datos abstractos en lugar de consultas SQL, y está optimizado para la recuperación directa sin índices secundarios ni agregaciones. Este diseño, combinado con su operación en memoria, permite tiempos de respuesta de sub-milisegundos para muchas cargas de trabajo.
Historia
El proyecto Redis comenzó cuando Salvatore Sanfilippo (apodado antirez) intentaba mejorar la escalabilidad de su startup italiana y desarrolló un analizador de registros web en tiempo real. Después de encontrar problemas significativos al escalar algunos tipos de cargas de trabajo con sistemas de bases de datos tradicionales, Sanfilippo comenzó en 2009 a prototipar una primera versión de prueba de concepto de Redis en Tcl. Más tarde, Sanfilippo tradujo ese prototipo al lenguaje C e implementó el primer tipo de datos, la lista. Después de unas semanas de usar el proyecto internamente con éxito, Sanfilippo decidió publicarlo como código abierto, anunciando el proyecto en Hacker News. El proyecto comenzó a ganar tracción, particularmente entre la comunidad Ruby, siendo GitHub e Instagram de las primeras empresas en adoptarlo.
Sanfilippo fue contratado por VMware en marzo de 2010. En mayo de 2013, Redis fue patrocinado por Pivotal Software (una escisión de VMware). En junio de 2015, el desarrollo pasó a ser patrocinado por Redis Ltd. En octubre de 2018, se lanzó Redis 5.0, introduciendo Redis Stream, una nueva estructura de datos que permite el almacenamiento de múltiples campos y valores de cadena con una secuencia automática basada en el tiempo en una sola clave. En junio de 2020, Sanfilippo renunció como único mantenedor de Redis, siendo sucedido por Yossi Gottlieb y Oran Agra. Sanfilippo regresó a Redis en diciembre de 2024.
Evolución de las Licencias
En agosto de 2018, para controlar el uso del software por parte de proveedores de nube gestionada sin una compensación adecuada, Redis Ltd. anunció que relicenciaría los módulos opcionales de Redis de la Licencia Pública General Affero de GNU (AGPL) a la Licencia Apache, pero sujeta a un anexo conocido como la "Cláusula de Commons" que restringe el uso comercial. Esto hizo que los módulos fueran de código fuente disponible y ya no software libre. El software central de Redis permaneció bajo una licencia BSD, con Redis Ltd. comprometiéndose a mantener estos términos.
En febrero de 2019, citando confusión sobre los términos de licencia, los términos de licencia de la Licencia Apache con Cláusula de Commons para los módulos de Redis fueron reemplazados por la "Licencia de Código Fuente Disponible de Redis" (RSAL), que prohíbe explícitamente el uso comercial de los módulos como parte de "una base de datos, un motor de caché, un motor de procesamiento de flujos, un motor de búsqueda, un motor de indexación o un motor de servicio ML/DL/AI". La última revisión de los módulos bajo una licencia libre y de código abierto fue bifurcada por miembros de la comunidad como el proyecto GoodFORM.
En marzo de 2024, Redis Ltd. anunció que, a partir de la versión 7.4, el software central de Redis sería relicenciado bajo la RSAL y la Licencia Pública del Lado del Servidor (SSPL), ambas de código fuente disponible y no libres. La Fundación Linux anunció posteriormente que bifurcaría la última versión de Redis bajo licencia BSD como Valkey. En mayo de 2025, Redis Ltd. anunció que cambiaría la licencia nuevamente a la AGPL a partir de la versión 8.0, citando que las bifurcaciones habían logrado su objetivo de crear un "campo de juego nivelado" de productos diferenciados, y que Redis había logrado un "crecimiento récord" desde el cambio de licencia.
Modelo de Datos y Tipos
Redis asigna claves a tipos de valores. Redis admite una serie de tipos de datos, incluyendo Cadenas, documentos de Notación de Objetos JavaScript (JSON), Hashes (una colección de campos, cada campo es un par nombre-valor de cadena), listas, conjuntos, conjuntos vectoriales y más. Esta variedad permite a los desarrolladores modelar diversos escenarios de aplicación directamente dentro de Redis, desde búsquedas simples de clave-valor hasta estructuras de datos complejas como conjuntos ordenados para tablas de clasificación o índices geoespaciales.
El Motor de Consultas de Redis permite a los usuarios usar Redis como una base de datos de documentos, una base de datos vectorial, un índice secundario y un motor de búsqueda. Con el Motor de Consultas de Redis, los usuarios pueden definir índices para documentos hash y JSON, y usar un lenguaje de consulta enriquecido para búsqueda vectorial, búsqueda de texto completo, consultas geoespaciales y agregaciones. Esto extiende Redis más allá de una simple caché hacia una plataforma de datos multimodelo, apoyando aplicaciones modernas que requieren capacidades de consulta flexibles.
Mensajería y Transacciones
Redis Pub/Sub (abreviatura de publicar/suscribirse) es una capacidad de mensajería ligera. Los publicadores envían mensajes a un canal, y los suscriptores reciben mensajes de ese canal. Este patrón se utiliza comúnmente para notificaciones en tiempo real, sistemas de chat y arquitecturas basadas en eventos donde componentes desacoplados necesitan comunicarse de forma asíncrona.
Una transacción de Redis permite la ejecución de un grupo de comandos en un solo paso. Una solicitud enviada por otro cliente nunca será atendida durante la ejecución de una transacción. Esto garantiza que los comandos se ejecuten como una operación aislada única. Las transacciones de Redis se basan en un modelo de cola y ejecución, donde los comandos se ponen en cola y luego se ejecutan secuencialmente sin interrupción, asegurando la atomicidad del lote.
Los usuarios de Redis también pueden cargar y ejecutar scripts de Lua en el servidor. Esta característica permite que operaciones complejas se realicen atómicamente en el lado del servidor, reduciendo los viajes de ida y vuelta de red y asegurando la consistencia. Los scripts de Lua son particularmente útiles para implementar lógica de negocio personalizada que debe ejecutarse cerca de los datos.
Persistencia y Durabilidad
Redis normalmente mantiene todo el conjunto de datos en memoria. Las versiones hasta la 2.4 podían configurarse para usar lo que denominaban memoria virtual, en la que parte del conjunto de datos se almacena en disco, pero esta característica está obsoleta. La persistencia en Redis se puede lograr mediante dos métodos diferentes: instantáneas, donde el conjunto de datos se transfiere asincrónicamente de la memoria al disco a intervalos regulares como un volcado binario, utilizando el Formato de Archivo de Volcado RDB de Redis; o registro en diario, donde un registro de cada operación que modifica el conjunto de datos se añade a un archivo de solo añadidura (AOF) en un proceso en segundo plano. Redis puede reescribir el archivo de solo añadidura en segundo plano para compactarlo y reducir el tiempo de recuperación.
La implementación de Redis utiliza la llamada al sistema fork para duplicar el proceso que contiene los datos. Esto permite que el proceso padre continúe sirviendo a los clientes mientras el proceso hijo persiste los datos en memoria en el disco. Este diseño minimiza el tiempo de inactividad durante las operaciones de persistencia y es un factor clave en la capacidad de Redis para mantener una alta disponibilidad mientras asegura la durabilidad de los datos.
Diferencias con Otros Sistemas de Bases de Datos
Redis es un sistema que funciona tanto como almacén de datos como caché. Los datos se modifican y leen de la memoria principal de la computadora, mientras que también se persisten en el disco en un formato optimizado para el acceso secuencial en lugar del acceso aleatorio. Los datos formateados solo se reconstruyen en memoria una vez que el sistema se reinicia. Este enfoque contrasta con las bases de datos tradicionales que dependen principalmente del almacenamiento basado en disco y patrones de acceso aleatorio.
Redis utiliza un modelo de datos que difiere del sistema de gestión de bases de datos relacionales (RDBMS). Los comandos especifican operaciones sobre tipos de datos abstractos en lugar de consultas que deben ser ejecutadas por un motor de base de datos. Los datos se almacenan en estructuras diseñadas para la recuperación directa. No depende de índices secundarios, agregaciones u otras características comunes en los RDBMS tradicionales. Esta simplicidad y enfoque en la operación en memoria hacen que Redis sea excepcionalmente rápido para patrones de acceso específicos, pero también significa que las consultas analíticas complejas son más adecuadas para otros sistemas.
Uso Moderno y Ecosistema
A partir del 1 de mayo de 2025, para todas las versiones de Redis que comiencen con la 8.0, todos los tipos de datos están incluidos en el mismo paquete y disponibles bajo la Licencia de Código Fuente Disponible de Redis v2. Anteriormente, algunos tipos de datos estaban separados y, por lo tanto, disponibles bajo diferentes licencias. Esta consolidación simplifica el despliegue y las licencias para los usuarios, haciendo de Redis una plataforma más cohesiva.
Redis se ha convertido en un componente fundamental en muchas pilas tecnológicas, utilizado a menudo junto con proveedores de nube y plataformas de nube principales para el almacenamiento en caché, la gestión de sesiones y el análisis en tiempo real. Sus características de baja latencia también lo hacen adecuado para aplicaciones de IA y aprendizaje automático que requieren acceso rápido a los datos para el servicio de modelos o almacenes de características. El soporte del Motor de Consultas de Redis para la búsqueda vectorial se alinea con la creciente demanda de aplicaciones de IA generativa y modelos de lenguaje grandes que dependen de la búsqueda de similitud sobre incrustaciones.