Redis ( / r ɛ d ɪ s / ; [6] [7] remoto diccionario servidor ) [6] es una tienda de estructura de datos en memoria, utilizado como distribuido , en memoria clave-valor de base de datos , la memoria caché y intermediario de mensajes , con durabilidad opcional . Redis admite diferentes tipos de estructuras de datos abstractas , como cadenas , listas , mapas , conjuntos , conjuntos ordenados, HyperLogLogs , mapas de bits ,arroyos e índices espaciales . El proyecto es desarrollado y mantenido por un equipo central del proyecto y, a partir de 2015, [actualizar]está patrocinado por Redis Labs . [8] Es un software de código abierto publicado bajo una licencia BSD de 3 cláusulas. [5]
Autor (es) original (es) | Salvatore Sanfilippo [1] [2] |
---|---|
Desarrollador (es) | Redis Labs [1] [2] |
Versión inicial | 10 de mayo de 2009 |
Lanzamiento estable | 6.2.3 [3] / 3 de mayo de 2021 |
Repositorio | |
Escrito en | C |
Sistema operativo | Similar a Unix [4] |
Disponible en | inglés |
Tipo | Almacén de estructura de datos , base de datos de valores-clave |
Licencia | BSD 3 cláusula [5] |
Sitio web | redis |
Historia
El nombre Redis significa REmote DIctionary Server. [6] 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ó a crear un prototipo de una primera versión de prueba de concepto de Redis en Tcl . [9] Posteriormente, Sanfilippo tradujo ese prototipo al lenguaje C e implementó el primer tipo de datos, la lista. Después de algunas semanas de usar el proyecto internamente con éxito, Sanfilippo decidió abrirlo y anunció el proyecto en Hacker News . El proyecto comenzó a ganar terreno, más aún entre la comunidad Ruby, con GitHub e Instagram entre las primeras empresas que lo adoptaron. [10] [11]
Sanfilippo fue contratado por VMware en marzo de 2010. [12] [13] [14]
En mayo de 2013, Redis fue patrocinada por Pivotal Software (una escisión de VMware). [15]
En junio de 2015, el desarrollo fue patrocinado por Redis Labs . [dieciséis]
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 tecla. [17]
En junio de 2020, Salvatore Sanfilippo dejó el cargo de mantenedor de Redis. [18] [19]
Diferencias con otros sistemas de bases de datos
Redis popularizó la idea de un sistema que puede considerarse al mismo tiempo una tienda y un caché , utilizando un diseño donde los datos siempre se modifican y se leen desde la memoria principal de la computadora, pero también se almacenan en el disco en un formato que no es apto para aleatorio. acceso a los datos, pero solo para reconstruir los datos en la memoria una vez que se reinicia el sistema. Al mismo tiempo, Redis proporciona un modelo de datos que es muy inusual en comparación con un sistema de administración de bases de datos relacionales (RDBMS). Los comandos de usuario no describen una consulta para ser ejecutada por el motor de la base de datos, sino más bien operaciones específicas que se realizan en tipos de datos abstractos dados. Por lo tanto, los datos deben almacenarse de una manera que sea adecuada posteriormente para una rápida recuperación, 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 sirviendo a los clientes, mientras que el proceso secundario crea una copia de los datos en el disco.
Popularidad
Según las clasificaciones mensuales de DB-Engines , Redis suele ser la base de datos de valor clave más popular . [20] 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, [21] la base de datos NoSQL más popular en contenedores, [22] y la base de datos NoSQL número 4 de 2019 según la clasificación de stackshare de sitios web .io. [23] Fue votada como la base de datos más querida en la Encuesta para desarrolladores de Stack Overflow en 2017, 2018, 2019 y 2020. [24]
Idiomas admitidos
Desde la versión 2.6, Redis presenta scripts del lado del servidor en el lenguaje Lua . [25]
Muchos lenguajes de programación tienen enlaces de lenguaje Redis en el lado del cliente, incluidos: [26] ActionScript , C , C ++ , C # , Chicken , Clojure , Common Lisp , Crystal , D , Dart , Elixir , Erlang , Go , Haskell , Haxe , Io , Java , JavaScript ( Node.js ), Julia , Lua , Objective-C , OCaml , Perl , PHP , Pure Data , Python , R , [27] Racket , Ruby , Rust , Scala , Smalltalk , Swift y Tcl . Existen varios programas de software cliente en estos idiomas. [26]
Tipos de datos
Redis asigna claves a tipos de valores. Una diferencia importante entre Redis y otros sistemas de almacenamiento estructurado es que Redis admite no solo cadenas , sino también tipos de datos abstractos:
- Listas de cadenas
- Conjuntos de cadenas (colecciones de elementos no clasificados que no se repiten)
- Conjuntos ordenados de cadenas (colecciones de elementos no repetidos ordenados por un número de punto flotante llamado puntuación)
- Tablas hash donde las claves y los valores son cadenas
- HyperLogLogs utilizados para la estimación del tamaño de cardinalidad de conjunto aproximado, disponible desde Redis 2.8.9 en abril de 2014. [17]
- El flujo de entradas con grupos de consumidores le permite almacenar varios campos y valores de cadena con una secuencia automática basada en el tiempo en una sola clave, disponible desde Redis 5.0 en octubre de 2018 [17]
- Datos geoespaciales mediante la implementación de la técnica geohash , disponible desde Redis 3.2. [28]
El tipo de un 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. [29] El módulo Redis RedisJSON implementa ECMA-404 (el estándar de intercambio de datos de notación de objetos JavaScript ( JSON )) como un tipo de datos nativo. [30]
Persistencia
Por lo general, Redis guarda todo el conjunto de datos en la memoria. Las versiones hasta la 2.4 podrían configurarse para usar lo que se denominan memoria virtual [31] en la que parte del conjunto de datos se almacena en el disco, pero esta función está obsoleta. La persistencia en Redis se puede lograr a través de dos métodos diferentes. Primero mediante 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 Redis RDB. De forma alternativa por un diario , en un registro de cada operación que modifica el conjunto de datos se añade a un append archivo -solo (AOF) en un proceso en segundo plano. Redis puede reescribir el archivo de solo anexo en segundo plano para evitar un crecimiento indefinido de la revista. El diario se introdujo en la versión 1.1 y generalmente se considera el enfoque 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 completa del sistema en la configuración predeterminada, solo se perderían unos pocos segundos de datos.
Replicación
Redis admite la replicación maestra-réplica . Los datos de cualquier servidor Redis se pueden replicar en cualquier número de réplicas. Una réplica puede ser un maestro 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 parte del árbol de réplica. La replicación es útil para la escalabilidad de lectura (pero no la escritura) o la redundancia de datos. [32]
Actuación
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 todos los cambios en el disco antes de considerar una transacción comprometida. [6] Redis funciona como un solo proceso y es de un solo subproceso o de doble subproceso cuando reescribe el AOF (archivo de solo anexo). [33] Por lo tanto, una sola instancia de Redis no puede utilizar la ejecución paralela de tareas como los procedimientos almacenados .
Agrupación
Redis introdujo la agrupación en clústeres en abril de 2015 con el lanzamiento de la versión 3.0. [34] 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 las claves que pertenecen al mismo nodo y los comandos relacionados con las operaciones de selección de la base de datos no están disponibles. [35] Un clúster de Redis puede escalar hasta 1000 nodos, lograr una seguridad de escritura "aceptable" y continuar las operaciones cuando algunos nodos fallan. [36] [37]
Casos de uso
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, caché de página completa, aplicaciones de cola de mensajes, tablas de clasificación y recuento, entre otros. [38] Grandes empresas como Twitter están usando Redis, [39] Amazon Web Services ofrece un servicio administrado de Redis llamado Elasticache para Redis, Microsoft ofrece Azure Cache para Redis en Azure , [40] y Alibaba está ofreciendo ApsaraDB para Redis en Alibaba Cloud . [41]
Ver también
- NoSQL
- Amazon ElastiCache
- Tipo de datos replicados sin conflictos
- Memcached
Referencias
- ↑ a b Bernardi, Stefano (4 de enero de 2011). "Una entrevista con Salvatore Sanfilippo, creador de Redis, trabajando en Sicilia" . UE-Startups . Menlo Media.
- ^ a b Haber, Itamar (15 de julio de 2015). "Salvatore Sanfilippo: Bienvenido a Redis Labs" . Redis Labs .
- ^ "Versión 6.2.3" . 3 de mayo de 2021 . Consultado el 16 de mayo de 2021 .
- ^ "Introducción a Redis" .
Redis está escrito en ANSI C y funciona en la mayoría de los sistemas POSIX como Linux, * BSD, OS X sin dependencias externas.
- ^ a b "Copiando" . GitHub .
- ^ a b c d "Preguntas frecuentes: Redis" . Redis.io .
- ^ "Grupos de Google" . groups.google.com .
- ^ Kepes, Ben (15 de julio de 2015). "Redis Labs contrata al creador de Redis, Salvatore Sanfilippo" . Mundo de la red . Consultado el 30 de agosto de 2015 .
- ^ Sanfilippo, Salvatore (28 de abril de 2017). "Prototipo Tcl de Redis" . GitHub Gist . Consultado el 8 de octubre de 2018 .
- ^ Wanstrath, Chris (3 de noviembre de 2009). "Presentación de Resque" . Blog . Consultado el 8 de octubre de 2018 .
- ^ Krieger, Mike (31 de octubre de 2011). "Almacenamiento de cientos de millones de pares clave-valor simples en Redis" . Blog de ingeniería de Instagram . Consultado el 8 de octubre de 2018 .
- ^ Shapira, Gwen (17 de marzo de 2010). "VMware contrata al desarrollador clave de Redis, pero ¿por qué?" . Blog . Consultado el 25 de septiembre de 2016 .
- ^ Sanfilippo, Salvatore (15 de marzo de 2010). "VMware: el nuevo hogar de Redis" . Blog . Consultado el 25 de septiembre de 2016 .
- ^ Collison, Derek (15 de marzo de 2010). "VMware: la consola: VMware contrata desarrollador clave para Redis" . Blog de VMware . Archivado desde el original el 22 de marzo de 2010 . Consultado el 25 de septiembre de 2016 .
- ^ Sanfilippo, Salvatore. "Patrocinadores de Redis" . Redis.io . Redis Labs . Consultado el 11 de abril de 2019 .
- ^ Sanfilippo, Salvatore (15 de julio de 2015). "Gracias Pivotal, Hola Redis Labs" .
- ^ a b c https://redislabs.com/blog/redis-5-0-is-here/
- ^ https://www.theregister.com/2020/06/30/redis_creator_antirez_quits/ fuente
- ^ "El final de la aventura de Redis -" . antirez.com . Consultado el 10 de noviembre de 2020 .
- ^ "DB-Engines Ranking - ranking de popularidad de las tiendas de valor clave" . DB-Engines .
- ^ "Mejores bases de datos NoSQL: informe de otoño de 2015 de G2 Crowd" . Multitud G2.
- ^ "8 hechos sorprendentes sobre la adopción real de Docker" . Datadog .
- ^ "🏆 Las 50 mejores herramientas de desarrollo de 2019" . StackShare . Consultado el 28 de julio de 2020 .
- ^ "Resultados de la encuesta de desarrolladores 2019: bases de datos más queridas, temidas y buscadas" . Desbordamiento de pila . Stack Exchange . Consultado el 10 de noviembre de 2018 .
- ^ "EVAL - Redis" . redis.io .
- ^ a b "Redis" . redis.io .
- ^ Lewis, BW (5 de julio de 2015). "rredis:" Redis "Cliente de base de datos de clave / valor" . La Red Archivo R Integral . Consultado el 3 de abril de 2019 .
- ^ "Notas de la versión de Redis 3.2" . GitHub . Consultado el 10 de marzo de 2017 .
- ^ "Módulos de Redis: una introducción a la API" . redis.io . Consultado el 10 de julio de 2019 .
- ^ "RedisJSON - un tipo de datos JSON para Redis" . redisjson.io .
- ^ "Memoria virtual" . Redis.io . Consultado el 11 de abril de 2019 .
- ^ "Archivo de código de Google - almacenamiento a largo plazo para el alojamiento de proyectos de código de Google" . code.google.com .
- ^ "Redis en la Raspberry Pi: aventuras en tierras no alineadas - " . antirez.com .
- ^ "Notas de la versión de Redis 3.0" . Consultado el 10 de marzo de 2017 .
- ^ "Especificaciones de grupo" . Consultado el 10 de marzo de 2017 .
- ^ "Especificaciones de grupo" . Consultado el 10 de marzo de 2017 .
- ^ "Tutorial de clúster" . Consultado el 10 de marzo de 2017 .
- ^ "Los 5 mejores casos de uso de Redis: ObjectRocket" . ObjectRocket . Rackspace. 7 de noviembre de 2017.
- ^ "Cómo Twitter usa Redis para escalar - 105TB de RAM, 39MM QPS, más de 10,000 instancias - Alta escalabilidad" . Highscalability.com .
- ^ "Azure Redis Cache - Servicio en la nube de caché de Redis - Microsoft Azure" . azure.microsoft.com .
- ^ "ApsaraDB para Redis: un servicio de base de datos de valor clave - Alibaba Cloud" . www.alibabacloud.com .
Otras lecturas
- Jeremy Zawodny, Redis: Ligera clave / valor tienda que va más lejos , Linux Magazine , August 31, 2009
- Isabel Drost y Jan Lehnard (29 de octubre de 2009), Sucesos: Conferencia NoSQL, Berlín , El H . Diapositivas para la presentación de Redis. Resumen .
- Billy Newport (IBM): " Evolución del modelo de programación clave / valor a un nivel superior " Conferencia Qcon 2009 San Francisco.
- A Mishra: " Instalar y configurar Redis en el servidor Centos / Fedora ".
- E. Mouzakitis: " Seguimiento del rendimiento de Redis "
enlaces externos
- Página web oficial