Redis ( / ˈ r ɛ d ɪ s / ; [7] [8] Servidor de diccionario remoto ) [7] es un almacenamiento en memoria disponible en origen , que se utiliza como una base de datos de clave-valor en memoria distribuida , caché y agente 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 , flujos 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 para Redis adoptaron la SSPL . [27] En 2024, el código principal de Redis pasó a tener doble licencia, la Redis Source Available License v2 y la Server Side Public License 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 significativos al escalar algunos tipos de cargas de trabajo utilizando sistemas de bases de datos tradicionales, Sanfilippo comenzó en 2009 a prototipar 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 unas semanas de usar el proyecto internamente con éxito, Sanfilippo decidió abrirlo como código fuente, anunciando el proyecto en Hacker News . El proyecto comenzó a ganar tracción, particularmente entre la comunidad Ruby, con GitHub e Instagram estando 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 patrocinado por Pivotal Software (una empresa derivada de VMware). [34]
En junio de 2015, el desarrollo pasó a estar patrocinado por Redis Labs . [35]
En agosto de 2018, Redis Labs anunció el cambio a una licencia de software disponible en código fuente , la Licencia Pública del Lado del Servidor para algunos de los módulos opcionales disponibles para Redis, [27] al tiempo que afirmó que el software principal seguirá teniendo licencia BSD. [36]
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. [37]
En junio de 2020, Salvatore Sanfilippo renunció como único responsable de Redis. Sanfilippo fue reemplazado por Yossi Gottlieb y Oran Agra. [38] [39]
En marzo de 2024, Redis cambió a una licencia de software propietario diferente, denominada Redis Source Available License v2 y Server Side Public License v1, también para su repositorio principal, [6] rompiendo la promesa de 2018. Como consecuencia, la Linux Foundation creó una bifurcación con el nombre de Valkey , [40] permitiendo a los mantenedores, colaboradores 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 un almacén y un caché al mismo tiempo. Fue diseñado para que los datos siempre se modifiquen y lean desde la memoria principal del ordenador, 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 base de datos, sino operaciones específicas que se realizan sobre tipos de datos abstractos determinados. Por lo tanto, los datos deben almacenarse de una manera que sea adecuada posteriormente para una recuperación rápida. La recuperación se realiza sin la 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 prestando servicio a los clientes mientras el proceso secundario escribe los datos en memoria en el disco.
Según las clasificaciones mensuales de DB-Engines , Redis suele ser la base de datos de clave-valor más popular . [10] Redis también ha sido clasificada como la base de datos NoSQL n.° 4 en satisfacción del usuario y presencia en el mercado según las reseñas de los usuarios, [41] la base de datos NoSQL más popular en contenedores, [42] y el almacén de datos n.° 4 de 2019 según el sitio web de clasificación stackshare.io. [43] Fue votada como la base de datos más querida en la encuesta de desarrolladores de Stack Overflow cada año desde 2017 hasta 2021. [44]
Desde la versión 2.6, Redis cuenta con scripts del lado del servidor en el lenguaje Lua . [45]
Muchos lenguajes de programación tienen enlaces de lenguaje Redis en el lado del cliente, incluidos: [46] ActionScript , C , C++ , C# , Chicken , Clojure , Common Lisp , Crystal , D , Dart , Delphi , [47] Elixir , Erlang , Go , Haskell , Haxe , Io , Java , Nim , JavaScript ( Node.js ), Julia , Lua , Objective-C , OCaml , Perl , PHP , Pure Data , Python , R , [48] Racket , Ruby , Rust , Scala , Smalltalk , Swift y Tcl . Existen varios programas de software cliente en estos lenguajes. [46]
Redis asigna claves a tipos de valores. Una diferencia importante entre Redis y otros sistemas de almacenamiento estructurado es que Redis no solo admite cadenas , sino también tipos de datos abstractos:
El tipo de un valor determina qué operaciones (denominadas comandos) están disponibles para el valor. Redis admite operaciones atómicas de alto nivel del lado del servidor, como la intersección, la unión y la diferencia entre conjuntos y la ordenació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 licencia dual y no están sujetos a la cláusula BSD 3: [50]
Las implementaciones anteriores incluyen:
Redis normalmente mantiene todo el conjunto de datos en la memoria. Las versiones hasta la 2.4 se podían configurar para usar lo que ellos llaman memoria virtual [60] en la que parte del conjunto de datos se almacena en el disco, pero esta característica está obsoleta. La persistencia en Redis se puede lograr a través de dos métodos diferentes. Primero, mediante la creación de instantáneas, donde el conjunto de datos se transfiere de forma asincrónica de la memoria al disco a intervalos regulares como un volcado binario, utilizando el formato de archivo de volcado RDB de Redis. 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 anexión (AOF) en un proceso en segundo plano. Redis puede reescribir el archivo de solo anexión en segundo plano para evitar un crecimiento indefinido del registro en diario. El registro en diario se introdujo en la versión 1.1 y generalmente se considera el enfoque más seguro.
De manera predeterminada, Redis escribe datos en un sistema de archivos al menos cada 2 segundos, con opciones más o menos robustas disponibles si es necesario. En caso de una falla total del sistema con 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 pueden replicarse 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 un feed completo de mensajes publicados en el maestro, en cualquier parte del árbol de replicación. La replicación es útil para la escalabilidad de lectura (pero no de escritura) o la redundancia de datos. [61]
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 que una transacción está confirmada. [7] Redis funciona como un solo proceso y es de un solo subproceso o de doble subproceso cuando reescribe el AOF (archivo de solo anexión). [62] Por lo tanto, una sola instancia de Redis no puede utilizar la ejecución paralela de tareas como los procedimientos almacenados .
Redis introdujo la agrupación en clústeres en abril de 2015 con el lanzamiento de la versión 3.0. [63] La especificación de clústeres 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 las claves que pertenecen al mismo nodo y los comandos relacionados con las operaciones de selección de bases de datos no están disponibles. [64] Un clúster de Redis puede escalar hasta 1000 nodos, lograr una seguridad de escritura "aceptable" y continuar las operaciones cuando algunos nodos fallan. [65] [66]
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áginas completas, las aplicaciones de cola de mensajes, las tablas de clasificación y el conteo, entre otros. [67] 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 Redis administrado llamado ElastiCache para Redis, Google ofrece un servicio Redis administrado llamado Cloud Memorystore, [68] Microsoft ofrece Azure Cache para Redis en Azure , [69] y Alibaba ofrece ApsaraDB para Redis en Alibaba Cloud . [70]
Redis se utiliza en empresas como Twitter, [14] [15] [71] 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.