Redis | ||
---|---|---|
Información general | ||
Tipo de programa | Base de datos clave-valor | |
Autor | Salvatore Sanfilippo | |
Desarrollador | Salvatore Sanfilippo | |
Lanzamiento inicial | 10 de abril de 2009 | |
Licencia | RSALv2 y SSPLv1 | |
Estado actual | activo | |
Idiomas | Inglés | |
Información técnica | ||
Programado en | ANSI C | |
Versiones | ||
Última versión estable | 7.4.12 de octubre de 2024 | |
Enlaces | ||
Redis es un motor de base de datos en memoria, basado en el almacenamiento en tablas de hashes (clave/valor) pero que opcionalmente puede ser usada como una base de datos durable o persistente. Está escrito en ANSI C por Salvatore Sanfilippo, quien es patrocinado por Redis Labs. Es distribuido bajo un modelo de licencias dual: RSALv2 y SSPLv1[1].
Historia
El desarrollo de Redis comenzó a principios de 2009 por Salvatore Sanfilippo para mejorar los tiempos de respuesta de un producto llamado LLOGG. El programa fue ganando popularidad, hasta que en marzo del 2010 la empresa VMWare contrató a Salvatore para trabajar a tiempo completo en Redis.[2][3] Poco después, VMWare contrató también a otro de los principales desarrolladores de Redis, Pieter Noordhuis. Entre mayo de 2013 y julio de 2015 Salvatore Sanfilippo fue patrocinado por Pivotal Software. A partir de esta fecha es patrocinado por Redis Labs.[4][5]
Lenguajes soportados
Desde la versión 2.6 el servidor de Redis incorpora un interpretador de Lua.
Los lenguajes de programación que soportan Redis en el cliente son:[6] ActionScript, C, C++, Jeliot,C#, Clojure, Common Lisp, Erlang, Go, Haskell, haXe, Io, Java, server-side JavaScript (Node.js), Lua, Objective-C, Perl, PHP, Pure Data, Python, Ruby, Scala, Smalltalk y Tcl.
Modelo de datos
El modelo de datos de Redis se basa en la estructura de datos del tipo diccionario o tabla de hashes que relaciona una llave a un contenido almacenado en un índice. La principal diferencia entre Redis y otros sistemas similares es que los valores no están limitados a ser de tipo string, otros tipos de datos están soportados:
- Listas (Lists) de strings
- Conjuntos (Sets) de strings (colecciones de elementos desordenados no repetidos)
- hashes donde la llave y el valor son del tipo string
El tipo de valor determina las operaciones (los comandos) disponibles. Redis soporta operaciones atómicas de alto nivel del lado del servidor, como inserciones, uniones, y diferencias entre conjuntos y listas ordenadas. Desde la versión 2.6, liberada a finales de octubre de 2012, se introduce la posibilidad de ejecutar Scripts en el servidor Redis, escritos en lenguaje Lua.
Persistencia
Redis normalmente guarda la información en la memoria RAM, pero en versiones superiores a la 2.4 se puede configurar para utilizar Memoria virtual[7] pero ahora esto está desactualizado. Se puede hacer que los datos sean persistentes de dos formas, una es hacer snapshots (capturas), aunque no sería realmente durable ya que estos son asíncronos al transferir la memoria al disco cada cierto tiempo. Desde la versión 1.1 la mejor alternativa es usar un archivo del tipo appendonly gracias a un sistema de Journaling el cual escribe en este archivo cada modificación que se realice sobre los datos en memoria pudiendo regenerar los datos. Esto genera un costo en el rendimiento, pero se puede configurar de dos formas, always, que escribirá cualquier cambio al instante, o everysec que lo hará segundo tras segundo.
Replicación
Redis soporta la replicación del tipo maestro-esclavo, pudiéndose replicar los datos de un servidor a muchos esclavos, también un esclavo puede ser maestro para otro esclavo, lo que permite soportar en Redis una replicación en forma de árbol. Los esclavos permiten la escritura de datos, lo que puede ocasionar inconsistencias en los datos no intencionales.
La función de publicación/subscripción esta totalmente soportada, cuando un cliente esclavo se subscribe a un canal este recibe un feed completo de publicaciones del maestro, replicando así en todo el árbol.
La replicación es útil para escalar la lectura (no la escritura) y/o redundar los datos.[8]
Rendimiento
En escenarios de datos no durables (solo usando memoria RAM) el rendimiento puede ser extremo comparado con motores de bases de datos,[9] tampoco hay una notable diferencia entre lectura y escritura de datos.
Véase también
- Portal:Software libre. Contenido relacionado con Software libre.
- NoSQL
- Mnesia
- Memcached
- MemcacheDB
- Membase
- Cassandra
Referencias
- Jeremy Zawodny, "Redis: Lightweight key/value Store That Goes the Extra Mile", Linux Magazine, August 31, 2009 (en inglés).
- Isabel Drost and Jan Lehnard (29 October 2009), "Happenings: NoSQL Conference, Berlin", The H. Slides for the Redis presentation. Summary (en inglés).
- Billy Newport (IBM): "Evolving the Key/Value Programming Model to a Higher Level", Qcon Conference 2009 San Francisco (en inglés).
- ↑ Trollope, Rowan (20 de marzo de 2024). «Redis Adopts Dual Source-Available Licensing». Redis (en inglés). Consultado el 25 de marzo de 2024.
- ↑ [1]
- ↑ «VMWare: The Console: VMware hires key developer for Redis». Archivado desde el original el 22 de marzo de 2010. Consultado el 25 de enero de 2012.
- ↑ Thanks Pivotal, Hello Redis Labs, 15 de julio de 2015, Salvatore Sanfilippo
- ↑ [2]
- ↑ «Redis language bindings». Archivado desde el original el 8 de febrero de 2014. Consultado el 25 de enero de 2012.
- ↑ Redis documentation "Virtual Memory", redis.io, accessed January 18, 2011.
- ↑ http://code.google.com/p/redis/wiki/ReplicationHowto
- ↑ «FAQ».