Continuando con nuestro curso básico de Redis, hoy vamos a tener la oportunidad de indagar un poco mas sobre esta base de datos. Anteriormente vimos como instalar Redis y también como iniciar su servidor y cliente. Ahora veamos mas sobre sus fundamentos y en que podemos utilizar Redis.
Ahora nos preguntamos: ¿Que hace Redis? ¿Que podemos solucionar con Redis? ¿Que esperamos de Redis? Para dar respuestas a esta inquietudes, debemos conocer mas de esta base de datos.
[wp-svg-icons icon=»quill» wrap=»span»] Fundamentos
Cuando tratamos con base de datos relacionales, estamos acostumbrados que la definición de las misma viene dado por un nombre, pero en esta ocasión es distinto. Redis simplemente identifica las base de datos con un numero, siendo 0 (cero) la base de datos por defecto. Ahora bien, Redis cuenta con 16 (0 – 15) bases de datos y para cambiarte entre ellas, lo haces con un “select” seguido del numero. Para ello vamos al cliente y escribimos lo siguiente.
select 1; OK
Esto dará como resultado un “OK” y te indicara la base de datos en donde esta posicionada
(127.0.0.1:6379[1]>)
Para que veas de manera gráfica la cantidad de bases de datos, lo haces de la siguiente manera.
CONFIG GET databases
Tenemos como resultado.
127.0.0.1:6379[1]> CONFIG GET databases 1) "databases" 2) "16"
Redis dispone de cinco estructuras de datos, para entender todas estas estructuras es necesario que tengamos bien en claro como trabajar y como funciona el método de clave-valor.
En este caso “clave” es lo que utiliza Redis para identificar el conjunto de datos, y tendría una sintaxis como esta:
key value
Como ves, la clave puede ser cualquier nombre que identifique el valor que tendrá escrito a continuación.
El “valor” puede representar cualquier cosa, y es aqui en donde almacenaras datos de las cinco estructuras de las que dispone Redis:
- Cadena de texto
- Listas
- Hashes
- Conjunto
- Conjunto ordenados
Redis trata los valores como byte para no tener que preocuparse el por el tipo de datos que recibe. Pero ¿Como seria la sintaxis para asignar y obtener un valor?
Para asignar y obtener los valores es bien sencillo. Por lo que el asignar seria:
set miclave mivalor
Y para obtener ese valor seria.
get miclave
<127.0.0.1:6379> set guiadev_des "Explorando Redis" OK <127.0.0.1:6379> get guiadev_des "Explorando Redis"
Este es el formato básico de un comando en Redis, tenemos un comando “set” para asignar un valor y comando “get” para obtener esos valores.
[wp-svg-icons icon=»stack» wrap=»span»] Estructura de datos
Ahora veamos las estructuras de datos que maneja Redis. Una de las cosas que me gusta de esta base de datos es su simple definición de los comandos para utilizar los diferentes tipo de datos.
En el ejemplo anterior vimos el comando “set” que lo utilizamos para las cadenas de texto. Pero si utilizamos el comando “hset” lo utilizaremos para las tablas hash.
[wp-svg-icons icon=»link» wrap=»span»] Cadenas de texto
La mas básicas de las estructuras seria las cadenas de texto, dado que con un “nombreclave” “valor” ya tenemos el comando listo.
Anteriormente vimos un caso común del empleo de esta cadena de texto, cuando asignamos a la clave guiadev_des el valor “Explorando con Redis”. Ahora veamos otro ejemplo asignando un objeto.
<127.0.0.1:6379> set guiadev "{name:guia, web:guiadev.com}" OK
Si hacemos un get de la clave guiadev, obtenemos el valor del objeto
<127.0.0.1:6379> get guiadev "{name:guia, web:guiadev.com}"
Redis también cuenta con otra opciones como por ejemplo, strlen <clave>, el cual usamos para ver la logitud del valor
<127.0.0.1:6379> strlen guiadev (integer) 28
La opción “getrange” <clave> <start> <end>, devuelve el valor en el rango especificado, por ejemplo, si queremos que devuelva “web:guiadev.com”, indico en el parámetro start y end la posición de dicho valor.
<127.0.0.1:6379> getrange guiadev 12 26 "web:guiadev.com"
Si quieres agregar mas contenido al valor utilizas las opción append <clave> <valor adicional>, esto añadirá el valor adicional al final de la cadena de texto inicial.
<127.0.0.1:6379> append guiadev_des " con el Curso Basico de Redis" (integer) 44 <127.0.0.1:6379> get guiadev_des "Explorando Redis con el Curso Basico de Redis"
También podemos utilizar comandos para incrementar (incr) y decrementar (decr) los valores de un “valor” entero.
<127.0.0.1:6379> set genius "10" OK <127.0.0.1:6379> incr genius (integer) 11 <127.0.0.1:6379> get genius "11"
Si utilizamos el comando incr <clave> incrementa 1 por defecto, si queremos hacer el incrementarlo por un numero en especifico, tenemos que utilizar el comando incrby.
<127.0.0.1:6379> incrby genius 5 (integer) 16 <127.0.0.1:6379> get genius "16"
Así como utilizamos el comando para incrementar, también podemos decrementar con el comando “decr”.
<127.0.0.1:6379> decr genius (integer) 15 <127.0.0.1:6379> get genius "15"
Para hacerlo con un numero en especifico lo hacemos como el comando anterior pero esta vez incluyendo la palabra “by”.
<127.0.0.1:6379> decrby genius 5 (integer) 10 <127.0.0.1:6379> get genius "10"
Es importante mencionar que si hacemos estos con un valor con texto nos dará error.
<127.0.0.1:6379> incr guiadev_des (error) ERR value is not an integer or out of range
Bien, esto es solo algo básico que podemos hacer con las cadenas de texto.
[wp-svg-icons icon=»code» wrap=»span»] Hashes
Los hashes pueden ser manejados como las cadenas de textos, con la diferencia que podemos tener un poco mas de control sobre los datos, ya que podemos asignar un valor por campo. En esta ocasión utilizaremos los comandos “hset” y “hget”. Veamos algunos ejemplos:
<127.0.0.1:6379> hset base_datos redis "10" (integer) 1 <127.0.0.1:6379> hget base_datos redis "10"
Para setear múltiples registros lo hacemos con el comando “hmset”.
<127.0.0.1:6379> hmset base_datos mysql 11 mongodb 12 OK
Para obtener todos los valores del hash, lo hacemos de la siguiente manera.
<127.0.0.1:6379> hgetall base_datos 1)"redis" 2)"10" 3)"mysql" 4)"11" 5)"mongodb" 6)"12"
También podemos utilizar el comando «hdel» para eliminar algún campo del hash.
<127.0.0.1:6379> hdel base_datos mysql (integer) 1 127.0.0.1:6379> hgetall base_datos 1) "redis" 2) "10" 3) "mongodb" 4) "12" <127.0.0.1:6379>
[wp-svg-icons icon=»signup» wrap=»span»] Listas
Como bien sabemos las listas nos permiten manipular un conjunto de datos a través de sus indices. En las listas podemos añadir valores, obtener el primer o el ultimo valor manipulándolo desde su indice. En esta oportunidad podemos tener como ejemplo una lista de usuarios. Para añadir valores a la lista usamos el comando “lpush”.
<127.0.0.1:6379> lpush listausuario Jose (integer) 1 <127.0.0.1:6379> ltrim listausuario 0 20 OK
El comando “ltrim” lo usamos para limitar los registros que tendrá la lista. Es este caso empezara en la posición cero (0) hasta la posición veinte (20).
Para obtener los valores de la lista utilizamos el comando “lrange”.
<127.0.0.1:6379> lrange listausuario 0 -1 1)"Jose"
Si queremos asignar un valor a la lista a través de su index lo hacemos de la siguiente manera.
127.0.0.1:6379> lset listausuario 1 Ricardo OK <127.0.0.1:6379> lrange listausuario 0 -1 1)"Jose" 2)"Ricardo"
La sintaxis del comando seria <comando> <clave> <indice> <valor>.
[wp-svg-icons icon=»address-book» wrap=»span»] Conjuntos
En los conjuntos podemos almacenar valores únicos con el que facilitan un número de operaciones con ellos. Para ver un ejemplo, digamos que tenemos una lista de amigos, en esta ocasión utilizamos el comando “sadd”.
<127.0.0.1:6379> sadd listaamigos Jorge Miguel Karina Angela (integer) 4
Los conjuntos devuelven un valor de 0 o 1 como los valores boleanos. Si el valor se encuentra en el conjunto devuelve 1 de lo contrario devuelve 0. Para saber si un valor pertenece al conjunto, lo hacemos de la siguiente manera con el comando «sismember».
127.0.0.1:6379> sismember listaamigos Angela (integer) 1 <127.0.0.1:6379> sismember listaamigos Juan (integer) 0
[wp-svg-icons icon=»address-book» wrap=»span»] Conjuntos Ordenados
Los conjuntos ordenados son como los hashes en la cual tienen mas control de las cadenas de textos. Los conjuntos ordenados les da un rango a los conjunto. Esto lo haces de la siguiente manera.
<127.0.0.1:6379> ZADD listaamigos 1 "Jorge" 25 "Miguel" 2 "Karina" 80 "Angela" (integer) 1
Para saber la cantidad de amigos de la lista que esta entre un rango de 1 al 30 podemos ejecutar el comando “zcount”
<127.0.0.1:6379> zcount listaamigos 1 30 (integer) 3
Conclusión
Estos son algunos de los ejemplos básicos de como utilizar el comando de cada estructura de datos de Redis. Como vemos los comandos son bastante sencillos de aprender y no tendrás confusión al momento de trabajar con cualquiera de la estructura de datos de Redis. Ahora, ya puedes probar iniciar tu cliente de Redis y probar la estructura de datos que mas te guste. Nos vemos en el siguiente capitulo.
No te pierdas el hilo de este Curso, sigue la Parte 03 donde descubriremos cómo integrar PHP y Redis.