Redis no es un almacén simple de valores-clave, en realidad es un servidor de estructuras de datos que admite diferentes tipos de valores.
Lo que esto significa es que, mientras que en los almacenes de valores-clave tradicionales, asocia claves de cadena a valores de cadena, en Redis el valor no está limitado a una cadena simple, sino que también puede contener estructuras de datos más complejas.
La siguiente es la lista de todas las estructuras de datos compatibles con Redis, que se tratarán por separado en este tutorial
Binary-safe strings.
Listas:
Colecciones de elementos de cadena ordenados de acuerdo con el orden de inserción. Básicamente son listas vinculadas.
Conjuntos:
Colecciones de elementos de cadena únicos y sin clasificar. Conjuntos ordenados, similares a Conjuntos, pero donde cada elemento de cadena está asociado a un valor de número flotante, llamado puntaje.
Los elementos siempre se toman ordenados por su puntuación, por lo que a diferencia de Sets, es posible recuperar un rango de elementos (por ejemplo, puede preguntar: déjeme los 10 mejores, o los 10 más bajos).
Hashes, que son mapas compuestos de campos asociados con valores. Tanto el campo como el valor son cadenas. Esto es muy similar a los hashes de Ruby o Python.
Arrays de bits (o simplemente mapas de bits):
Es posible, usando comandos especiales, manejar valores de Cadena como una matriz de bits: puede establecer y borrar bits individuales, contar todos los bits configurados en 1, encontrar el primer conjunto o un bit no configurado. Etcétera.
HyperLogLogs:
esta es una estructura de datos probabilísticos que se usa para estimar la cardinalidad de un conjunto. No tengas miedo, es más simple de lo que parece … Ver más adelante en la sección HyperLogLog de este tutorial.
No siempre es trivial entender cómo funcionan estos tipos de datos y qué usar para resolver un problema determinado a partir de la referencia de comandos, por lo que este documento es un curso intensivo de los tipos de datos de Redis y sus patrones más comunes.
Para todos los ejemplos usaremos la utilidad redis-cli, una utilidad de línea de comandos simple pero útil, para emitir comandos contra el servidor Redis.
Redis keys
Las claves son binarias seguras, esto significa que puede usar cualquier secuencia binaria como clave, para mas detalle sobre las claves podes leer: Redis keys y algunas otras reglas
Redis Strings
El tipo String es el tipo más simple de valor que puede asociar con una tecla Redis, te invitamos a leer el siguiente post en donde se presenta un breve pero claro ejemplo sobre cadenas: Redis Strings y ¿Qué significa que INCR es atómico?
Alterar y consultar key space
Hay comandos que no están definidos en tipos particulares, pero que son útiles para interactuar con el espacio de las claves y, por lo tanto, se pueden usar con claves de cualquier tipo, aquí también podrás encontrar información complementaria al tema y algunos ejemplos: Alterar y consultar key space
Redis expiración: claves con tiempo limitado
Antes de continuar con estructuras de datos más complejas, debemos analizar otra característica que funciona independientemente del tipo de valor, y se llama caduca. En el siguiente post presentamos una breve información sobre la expiración y ejemplos: Expiración de claves con tiempo limitado
Redis Lists
Para explicar el tipo de datos de la Lista, es mejor comenzar con un poco de teoría, ya que el término Lista a menudo se usa de forma incorrecta por gente de la tecnología de la información. Para conocer los primeros pasos en Listas y casos de uso comunes te recomendamos leer: Listas y casos de uso comunes
Creación automática y eliminación de keys
Es responsabilidad de Redis eliminar claves cuando las listas se dejan vacías, o crear una lista vacía si la clave no existe y estamos tratando de agregarle elementos, para conocer mas sobre las claves y ver algunos ejemplos: Creación automática y eliminación de keys
Redis Hashes
Los hashes se ven exactamente como uno podría esperar que se vea un “hash”, con pares de valores de campo, para ver los principales comandos poder ver el post: Introducción a Hashes
Redis Sets
Los conjuntos son colecciones de cadenas no ordenadas. En el post que dejo a continuación se presenta un ejemplo claro y conciso en: Redis Sets y algunos ejemplos
Conjuntos ordenados de Redis
Los conjuntos ordenados son un tipo de datos que es similar a una mezcla entre un conjunto y un hash, para saber mas sobre conjunto sordenados leer: Conjuntos ordenados de Redis
Puntajes lexicográficos
Con las versiones recientes de Redis 2.8, se introdujo una nueva característica que permite obtener rangos lexicográficamente, para saber mas lea el siguiente post: Puntajes lexicográficos
Bitmaps
Los mapas de bits no son un tipo de datos real, sino un conjunto de operaciones orientadas a bits definidas en el tipo de Cadena. Para saber los principales comandos y casos de uso comunes los invitamos a leer: Bitmaps
HyperLogLogs
Un HyperLogLog es una estructura de datos probabilísticos utilizada para contar cosas únicas (técnicamente esto se refiere a la estimación de la cardinalidad de un conjunto).
Por lo general, contar elementos únicos requiere utilizar una cantidad de memoria proporcional al número de elementos que desea contar, si desea conocer mas puede leer: HyperLogLogs
Otras características notables
Hay otras cosas importantes en la API de Redis que no se pueden explorar en el contexto de este documento, pero merece su atención:
- Es posible iterar incrementalmente el espacio clave de una gran colección.
- Es posible ejecutar scripts Lua en el servidor para mejorar la latencia y el ancho de banda.
- Redis es también un servidor Pub-Sub.