Redis

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
Redis
Desarrollador
Salvatore Sanfilippo
redis.io
Información general
Lanzamiento inicial 10 de abril de 2009
Última versión estable 2.8.6 (info)
13 de febrero de 2014; hace 6 meses (2014-02-13)
Última versión en pruebas 3.0.0-Beta1
11 de febrero de 2014; hace 7 meses (2014-02-11)
Género almacenamiento Key-value
Programado en ANSI C
Sistema operativo Multiplataforma
Licencia BSD
Idiomas Inglés
En español No No

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 VMware.[1] [2] y está liberado bajo licencia BSD por lo que es considerado software de código abierto.

Historia[editar]

El desarrollo de Redis JF, fue comenzado a principios de 2009 por Salvatore Sanfilippo, para mejorar los tiempos de respuesta de un producto llamado LLOGG. Fue ganando popularidad, hasta que en marzo del 2012 la empresa VMWare contrató a Salvatore para trabajar a tiempo completo en Redis. Poco después VMWare contrató también a otro de los principales desarrolladores de Redis, Pieter Noordhuis.

Lenguajes soportados[editar]

Los lenguajes de programación que soportan Redis son:[3]

ActionScript, C, C++, 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[editar]

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
  • Sets de strings (colecciones de elementos desordenados no repetidos)
  • Soporta sets de strings (coleciones de elementos no repetidos ordenados por una puntuación de tipo flotante)
  • hashes donde la llave y el valor son del tipo string

El tipo de valor determina las operaciones (los comandos) que son disponibles. Redis soporta operaciones atómicas de alto nivel del lado del servidor, como inserciones, unions, y diferencias entre sets y listas ordenadas. Desde la versión 2.6, liberada a finales de Octubre de 2012, se introduce una funcionalidad clave, la posibilidad de ejecutar Scripts en el servidor Redis, escritos en lenguaje Lua.

Persistencia[editar]

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[4] pero ahora esto está desactualizado. Se puede hacer que los datos sean persistentes de 2 formas, una es hacer snapshots (capturas), aunque no seria realmente durable ya que estos son asincrónicos 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 2 formas, always, que escribiera cualquier cambio en el instante, o everysec que lo hará segundo tras segundo.

Replicación[editar]

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.[5]

Rendimiento[editar]

En escenarios de datos no durables (solo usando memoria RAM) el rendimiento puede ser extremo comparado con motores de bases de datos,[6] tampoco hay una notable diferencia entre lectura y escritura de datos.

Véase también[editar]

Referencias[editar]

Enlaces externos[editar]