logo cosasdedevs

Conjuntos y listas en Redis

Conjuntos y listas en Redis

My Profile
Nov 13, 2020

Bienvenidos a esta tercera parte de tutoriales sobre Redis. Este será el último en el que trabajaremos con la consola y posteriormente veremos tutoriales más enfocados en como utilizar Redis con Python y Django con algunos ejemplos prácticos. Si todavía no has visto nada sobre Redis, te recomiendo que empieces por este tutorial en el que explico como instalarlo y todo lo básico que necesitas saber.

Esta vez nos toca ver los conjuntos y listas así que empezamos 🚀.

Conjuntos o sets

Los conjuntos son colecciones de strings no ordenados que además no pueden tener datos repetidos, como en los sets de Python´vamos.

Para crear un conjunto utilizaremos el comando sadd, el nombre de la clave y los valores que queramos añadir separados por espacios. En el siguiente caso por ejemplo quiero guardar los ids de todos los posts con la etiqueta django:

sadd posts:django 1 2 3 4 5

Si queremos ver los datos almacenados en un conjunto, utilizaremos el comando smembers:

smembers posts:django

En el caso de querer ver el número de elementos que tenemos en un set, usaremos scard:

scard posts:django

Diferencias entre sets

Si queremos ver las diferencias entre dos sets, utilizaremos sdiff. Para el siguiente ejemplo vamos a crear un segundo set con los posts que tengan la etiqueta python. Ya que los posts pueden tener varias etiquetas, vamos a utilizar el comando sdiff para averiguar que posts tienen la etiqueta python pero no la de django:

sadd posts:python 88 4 12 2
sdiff posts:python posts:django

Al lanzar este comando nos devolverá 88 y 12, ya que son los identificadores que no están en el set de posts:django.

Intersección entre sets

En el caso de querer saber que valores están tanto en un set como en otro, utilizaremos el comando sinter:

sinter posts:python posts:django

Unión de sets

Si lo que queremos es obtener tanto los valores de un set como de otro, utilizaremos el comando sunion:

sunion posts:python posts:django

Listas

Las listas se utilizan cuando lo que nos importa es poder acceder rápidamente al inicio o al final de esta. Sus usos habituales son como pilas y colas.

Las podemos usar por ejemplo para mostrar los últimos usuarios registrados en una web.

Crear una lista

Para crear una lista, utilizaremos el comando lpush:

lpush users 1 2 3 4 5

Este comando creará una pila en el que el último elemento, en este caso el 5, será el primer elemento que obtendremos al leer la lista.

Si queremos crear una cola en vez de una pila, utilizaremos el comando rpush. Este hará que el primer elemento que insertemos, será el primer elemento de la lista:

rpush users:queue 1 2 3 4 5

Leer una lista

Si queremos leer el contenido de una lista, vamos a utilizar el comando lrange en el que pasaremos el nombre de la lista, desde que posición queremos iniciar y la posición final, en el caso de querer obtener todos los datos de la lista, usaremos -1 para indicárselo:

lrange users 0 -1

Si solo queremos obtener el primer elemento, lo haríamos de esta forma:

lrange users 0 0

Obtener la longitud de una lista

Si queremos obtener el tamaño de una lista, podemos usar el comando llen:

llen users

Borrar elementos de una lista

Tenemos varias formas de borrar elementos de una lista. Si por ejemplo queremos borrar un elemento un número n de veces, usaremos lrem en el que el primer parámetro será el número de veces que queremos que sea eliminado y el valor a eliminar:

lrem users 2 3

En este caso eliminará dos veces el valor 3 si los encuentra en la lista.

Si queremos borrar el primer elemento de la lista, usaremos lpop y para el último elemento de la lista rpop:

lpop users
rpop users

Limitar una lista a un número de datos

Puede aparecer el caso en el que una lista crece demasiado y solo nos interesan guardar los últimos valores. Para este caso podemos utilizar el comando ltrim que eliminará de la lista los valores que no estén dentro del rango introducido:

ltrim users 0 2

Aquí lo que hacemos es pasar el nombre de la lista, la posición de inicio y la posición final. En este caso, nos quedaríamos con los tres primeros valores de la lista.

Sorted sets o listas ordenadas

Este tipo de listas son listas que se ordenan por un campo, normalmente una puntuación, votos, precio, etc a la cual cada una se le asigna un valor con el cual se relaciona. Si por ejemplo queremos crear una lista en la que guardemos los votos que ha recibido cada usuario, lo haremos así:

zadd votos 25 user1 12 user2 48 user3

Aquí votos será el nombre de la lista y después añadiremos el número de votos y el usuario al que corresponden.

Recuperar la información del listado

Si queremos recuperar la información del listado ordenada de menor a mayor, usaremos zrange. Si además de los valores, queremos obtener las puntuaciones añadiremos el parámetro withscores:

zrange votos 0 -1 withscores

Para obtener la lista con el orden de mayor a menor, usaremos zrevrange:

zrevrange votos 0 -1 withscores

Obtener el número de elementos

En el caso de querer obtener el número de elementos de este tipo de listas, usaremos zcard:

zcard votos

Si queremos obtener el número de elementos que están en un rango de puntuación, utilizaremos zcount:

zcount votos 20 50

Este comando nos devolverá el número de elementos que tienen una puntuación entre 20 y 50.

Incrementar la puntuación de un valor

En el caso de querer incrementar el valor de un usuario, podemos usar el comando zincrby:

zincrby votos 12 user1

Para utilizar este comando, primero pasamos el nombre de la lista, después el número que queremos incrementar. En este caso sumará 12 al valor que tiene actualmente y por último al usuario al que se lo queremos añadir.

Obtener la posición de un valor

Si queremos obtener la posición de un valor ordenada de menor a mayor, usaremos zrank:

zrank votos user1

En el caso contrario, utilizaremos zrevrank:

zrevrank votos user1

Obtener la puntuación de un valor

En nuestro ejemplo, para obtener la puntuación de usuario, utilizaremos el comando zscore:

zscore votos user1

Borrar un valor

Si ya no nos interesa guardar el valor de un usuario, podemos eliminarlo con el comando zrem:

zrem votos user1

Conclusiones

Los conjuntos y listas pueden tener muchas utilidades además de las vistas. En próximos tutoriales veremos como utilizarlos en casos prácticos para sacarle todo el potencial a esta base de datos 💪.

Como siempre, os recomiendo seguirme en Twitter y nos vemos en el siguiente tutorial 👋.

Nos tomamos en serio tu privacidad

Utilizamos cookies propias y de terceros para mejorar la experiencia del usuario a través de su navegación. Si pulsas entendido aceptas su uso. Ver política de cookies.

🐍 Sígueme en Twitter

Si te gusta el contenido que subo y no quieres perderte nada, sígueme en Twitter y te avisaré cada vez que cree contenido nuevo 💪
Luego ¡Te sigo!