Redis ( / r ɛ d ɪ s / ; [7] [8] Servidor de diccionario remoto ) [7] es un almacenamiento en memoria disponible en origen , que se utiliza como base de datos de valores clave en memoria distribuida , caché y intermediario de mensajes , con durabilidad opcional . [9] Debido a que contiene todos los datos en la memoria y debido a su diseño, Redis ofrece lecturas y escrituras de baja latencia , lo que lo hace particularmente adecuado para casos de uso que requieren un caché. Redis es la base de datos NoSQL más popular , [10] [11] [12] y una de las bases de datos más populares en general. [13] Redis se utiliza en empresas como Twitter , [14] [15] Airbnb , [16] Tinder , [17] Yahoo , [18] Adobe , [19] Hulu , [20] Amazon [21] y OpenAI . [22]
Redis admite diferentes tipos de estructuras de datos abstractas , como cadenas , listas , mapas , conjuntos , conjuntos ordenados, HyperLogLogs , mapas de bits , secuencias e índices espaciales .
El proyecto fue desarrollado y mantenido por Salvatore Sanfilippo, a partir de 2009. [23] Desde 2015 hasta 2020, dirigió un equipo central del proyecto patrocinado por Redis Labs . [24] Salvatore Sanfilippo dejó Redis como mantenedor en 2020. [25] En 2021, Redis Labs eliminó Labs de su nombre y ahora se conoce simplemente como "Redis". [26]
En 2018, algunos módulos de Redis adoptaron el SSPL . [27] En 2024, el código principal de Redis cambió a licencia dual bajo la Licencia disponible de origen de Redis v2 y la Licencia pública del lado del servidor v1. [6]
El nombre Redis significa Servidor de diccionario remoto. [7] El proyecto Redis comenzó cuando Salvatore Sanfilippo, apodado antirez , el desarrollador original de Redis, estaba tratando de mejorar la escalabilidad de su startup italiana, desarrollando un analizador de registros web en tiempo real . Después de encontrar problemas importantes al escalar algunos tipos de cargas de trabajo utilizando sistemas de bases de datos tradicionales, Sanfilippo comenzó en 2009 a crear un prototipo de una primera versión de prueba de concepto de Redis en Tcl . [28] Más tarde, Sanfilippo tradujo ese prototipo al lenguaje C e implementó el primer tipo de datos, la lista. Después de algunas semanas de utilizar el proyecto internamente con éxito, Sanfilippo decidió abrirlo y anunció el proyecto en Hacker News . El proyecto comenzó a ganar fuerza, particularmente entre la comunidad Ruby, y GitHub e Instagram estuvieron entre las primeras empresas en adoptarlo. [29] [30]
Sanfilippo fue contratado por VMware en marzo de 2010. [31] [32] [33]
En mayo de 2013, Redis fue patrocinada por Pivotal Software (una filial de VMware). [34]
En junio de 2015, el desarrollo pasó a ser patrocinado por Redis Labs . [35]
En agosto de 2018, Redis Labs anunció el cambio a una licencia de software disponible en origen , Server Side Public License . Inicialmente se dijo que el cambio afectaría sólo a algunos módulos opcionales desarrollados principalmente por Redis Labs. [27]
En octubre de 2018, se lanzó Redis 5.0, que presenta 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. [36]
En junio de 2020, Salvatore Sanfilippo renunció como único mantenedor de Redis. A Sanfilippo le sucedieron Yossi Gottlieb y Orán Agra. [37] [38]
En 2024, Redis cambió a una licencia de software propietario diferente, denominada Licencia disponible de origen de Redis v2 y Licencia pública del lado del servidor v1, también para su repositorio principal. [6] Como consecuencia, la Fundación Linux creó una bifurcación con el nombre de Valkey , [39] permitiendo a los mantenedores, contribuyentes y usuarios de la comunidad continuar trabajando en una versión de código abierto de la base de datos Redis.
Redis popularizó la idea de un sistema que puede considerarse tienda y caché al mismo tiempo. Fue diseñado para que los datos siempre se modifiquen y lean desde la memoria principal de la computadora, pero también se almacenen en el disco en un formato que no es adecuado para el acceso aleatorio a los datos. Los datos formateados solo se reconstruyen en la memoria una vez que se reinicia el sistema.
Redis también proporciona un modelo de datos que es muy inusual en comparación con un sistema de gestión de bases de datos relacionales (RDBMS). Los comandos de usuario no describen una consulta que debe ejecutar el motor de la base de datos, sino operaciones específicas que se realizan en tipos de datos abstractos determinados. Por lo tanto, los datos deben almacenarse de una manera que sea adecuada para una recuperación rápida en el futuro. La recuperación se realiza sin ayuda del sistema de base de datos en forma de índices secundarios, agregaciones u otras características comunes de los RDBMS tradicionales. La implementación de Redis hace un uso intensivo de la llamada al sistema fork para duplicar el proceso que contiene los datos, de modo que el proceso principal continúe atendiendo a los clientes mientras el proceso secundario escribe los datos en la memoria en el disco.
Según las clasificaciones mensuales de DB-Engines , Redis suele ser la base de datos de valores clave más popular . [10] Redis también ha sido clasificada como la base de datos NoSQL número 4 en satisfacción del usuario y presencia en el mercado según las opiniones de los usuarios, [40] la base de datos NoSQL más popular en contenedores, [41] y el almacén de datos número 4 de 2019 según la clasificación del stackshare de sitios web. .io. [42] Fue votada como la base de datos más querida en la encuesta para desarrolladores de Stack Overflow en 2017, 2018, 2019, 2020 y 2021. [43]
Desde la versión 2.6, Redis presenta secuencias de comandos del lado del servidor en el lenguaje Lua . [44]
Muchos lenguajes de programación tienen enlaces de lenguaje Redis en el lado del cliente, incluidos: [45] ActionScript , C , C++ , C# , Chicken , Clojure , Common Lisp , Crystal , D , Dart , Delphi , [46] Elixir , Erlang , Go , Haskell , Haxe , Io , Java , Nim , JavaScript ( Node.js ), Julia , Lua , Objective-C , OCaml , Perl , PHP , Pure Data , Python , R , [47] Racket , Ruby , Rust , Scala , Smalltalk , Swift y Tcl . Existen varios programas de software de cliente en estos idiomas. [45]
Redis asigna claves a tipos de valores. Una diferencia importante entre Redis y otros sistemas de almacenamiento estructurados es que Redis no solo admite cadenas , sino también tipos de datos abstractos:
El tipo de valor determina qué operaciones (llamadas comandos) están disponibles para el valor. Redis admite operaciones atómicas de alto nivel del lado del servidor, como intersección, unión y diferencia entre conjuntos y clasificación de listas, conjuntos y conjuntos ordenados.
Se admiten más tipos de datos según la API de módulos de Redis. Tenga en cuenta que algunos de ellos tienen doble licencia y no están sujetos a la cláusula BSD 3: [49]
Las implementaciones anteriores incluyen:
Redis normalmente guarda todo el conjunto de datos en la memoria. Las versiones hasta la 2.4 se pueden configurar para usar lo que ellos llaman memoria virtual [59] en la que parte del conjunto de datos se almacena en el disco, pero esta característica está en desuso. La persistencia en Redis se puede lograr mediante dos métodos diferentes. Primero, mediante la creación de instantáneas, donde el conjunto de datos se transfiere de forma asíncrona desde la memoria al disco a intervalos regulares como un volcado binario, utilizando el formato de archivo de volcado Redis RDB. Alternativamente, mediante el registro en diario , donde se agrega un registro de cada operación que modifica el conjunto de datos a un archivo de solo anexo (AOF) en un proceso en segundo plano. Redis puede reescribir el archivo de solo agregar en segundo plano para evitar un crecimiento indefinido de la revista. El registro en diario se introdujo en la versión 1.1 y generalmente se considera el método más seguro.
De forma predeterminada, Redis escribe datos en un sistema de archivos al menos cada 2 segundos, con opciones más o menos sólidas disponibles si es necesario. En el caso de una falla total del sistema en la configuración predeterminada, solo se perderían unos pocos segundos de datos.
Redis admite la replicación maestro-réplica . Los datos de cualquier servidor Redis se pueden replicar en cualquier número de réplicas. Una réplica puede ser maestra de otra réplica. Esto permite a Redis implementar un árbol de replicación de raíz única. Las réplicas de Redis se pueden configurar para aceptar escrituras, lo que permite inconsistencias intencionales y no intencionales entre instancias. La función de publicación-suscripción está completamente implementada, por lo que un cliente de una réplica puede suscribirse a un canal y recibir una fuente completa de mensajes publicados en el maestro, en cualquier lugar del árbol de replicación. La replicación es útil para la escalabilidad de lectura (pero no de escritura) o la redundancia de datos. [60]
Cuando no se necesita la durabilidad de los datos, la naturaleza en memoria de Redis le permite funcionar bien en comparación con los sistemas de bases de datos que escriben cada cambio en el disco antes de considerar confirmada una transacción. [7] Redis opera como un proceso único y tiene un solo subproceso o doble subproceso cuando reescribe el AOF (archivo de solo agregar). [61] Por lo tanto, una sola instancia de Redis no puede utilizar la ejecución paralela de tareas como procedimientos almacenados .
Redis introdujo la agrupación en clústeres en abril de 2015 con el lanzamiento de la versión 3.0. [62] La especificación del clúster implementa un subconjunto de comandos de Redis: todos los comandos de una sola tecla están disponibles, las operaciones de múltiples teclas (comandos relacionados con uniones e intersecciones) están restringidas a claves que pertenecen al mismo nodo y los comandos relacionados con operaciones de selección de bases de datos no están disponibles. [63] Un clúster de Redis puede escalar hasta 1000 nodos, lograr una seguridad de escritura "aceptable" y continuar las operaciones cuando algunos nodos fallan. [64] [65]
Debido a la naturaleza del diseño de la base de datos, los casos de uso típicos son el almacenamiento en caché de sesiones, el caché de página completa, aplicaciones de cola de mensajes, tablas de clasificación y conteo, entre otros. [66] El paradigma de mensajería de publicación-suscripción permite la comunicación en tiempo real entre servidores.
Amazon Web Services ofrece un servicio de Redis administrado llamado ElastiCache para Redis, Google ofrece un servicio de Redis administrado llamado Cloud Memorystore, [67] Microsoft ofrece Azure Cache para Redis en Azure , [68] y Alibaba ofrece ApsaraDB para Redis en Alibaba Cloud . [69]
Redis se utiliza en empresas como Twitter, [14] [15] [70] AirBnB, [16] Tinder, [17] Yahoo, [18] Adobe, [19] Hulu, [20] y Amazon. [21]
Redis está escrito en ANSI C y funciona en la mayoría de los sistemas POSIX como Linux, *BSD, OS X sin dependencias externas.