Pide tu presupuesto ya!

Lista de Redis para datos dinámicos: una guía completa

¿Está trabajando con colecciones de datos en su aplicación? Si utiliza matrices o listas vinculadas para almacenar datos, necesitará utilizar un lista de Redis.

En este tutorial, aprenderá a utilizar listas de Redis para crear aplicaciones sofisticadas.

¿Listo? ¡Sigue leyendo y nunca más uses una matriz de la misma manera!

Requisitos previos

Este tutorial será una demostración práctica. Si desea seguirnos, asegúrese de tener lo siguiente.

  • Una máquina Linux: este tutorial utiliza Ubuntu 20.04.
  • Redis instalado y ejecutándose en su máquina.

Crear una lista de Redis de gestión de inventario

Hay muchas formas de utilizar las listas de Redis, pero este tutorial cubre ejemplos que puede utilizar para aplicaciones del mundo real. Creará una lista que podrá utilizar para administrar su inventario.

1. SSH a su servidor, abra la terminal y ejecute el siguiente comando para verificar el estado del servicio Redis.

sudo systemctl status redis

Puede ver en el resultado a continuación que el servicio Redis está activo (en ejecución).

Comprobación del estado del servicio Redis

Si el servicio Redis no se está ejecutando, ejecute el siguiente comando systemctl para iniciar el servicio Redis. sudo systemctl iniciar redis

2. A continuación, ejecute el siguiente comando para abrir el CLI de Redis. La CLI de Redis es una herramienta de línea de comandos que se utiliza para enviar comandos a un servidor Redis y leer respuestas del servidor.

Como se muestra a continuación, el mensaje cambia una vez que está en la CLI de Redis, lo que indica que ahora está trabajando en el entorno de Redis.

Visualización de la CLI de Redis
Visualización de la CLI de Redis

3. Ahora, ejecuta lo siguiente EMPUJAR comando para agregar un elemento llamado ata1 a la lista llamada my_member.

Este comando inserta todos los elementos especificados al final de la lista (my_member). Si la lista (my_member) no existe, Redis la crea como una lista vacía justo antes de la operación de agregar.

Redis List admite empujes hacia la izquierda y hacia la derecha, lo que significa que puede agregar elementos al principio o al final de la lista. Este comportamiento es útil cuando desea implementar una cola o una pila.

Puede ver a continuación que el comando devolvió un valor entero de 1, lo que indica que se agregó un elemento a la lista. Este valor es la longitud de la lista después de la operación de inserción.

Agregar un miembro a la lista (my_member)
Agregar un miembro a la lista (my_member)

Quizás necesites agregar varios elementos a la vez. Si es así, ejecute el mismo comando RPUSH y especifique los nombres de los miembros separados por espacios simples, como se muestra a continuación:

RPUSH my_member ata1 ata2 ata3 ata4

Tenga en cuenta que los miembros se agregan uno tras otro al final de la lista, de izquierda a derecha.

Como puede ver a continuación, se agregaron cinco elementos a la lista (uno existente y cuatro nuevos miembros).

Agregar varios miembros al final de la lista
Agregar varios miembros al final de la lista

4. Por último, ejecute el LPUSH comando a continuación para agregar elementos al encabezado de una lista (my_member2), de izquierda a derecha. Al igual que el comando RPUSH, si la lista especificada no existe, esa lista se crea como una lista vacía justo antes de la operación de inserción.

Cada miembro se agregará a la lista en el siguiente orden:

  • ata4 como primer elemento.
  • ata3 como segundo elemento.
  • ata2 como tercer elemento.
  • ata1 como cuarto elemento.
LPUSH my_member2 ata1 ata2 ata3 ata4

Puede ver en el resultado que se agregaron cuatro elementos (4) a la lista desde que agregó cuatro nuevos miembros.

Agregar miembros al encabezado de la lista
Agregar miembros al encabezado de la lista

Agregar elementos solo si existe la lista especificada

Creaste una lista y agregaste un par de elementos. ¿Pero qué pasa si la lista especificada no existe? Puedes usar el RPUSHX comando para agregar un elemento al final de una lista, pero solo si la lista existe.

El comando RPUSHX es similar al comando RPUSH. La única diferencia es que no se realiza ninguna operación cuando la lista especificada no existe. El comando RPUSHX puede resultar útil para evitar desperdiciar memoria creando listas que nunca se utilizarán.

Ejecute lo siguiente RPUSHX comando para agregar elementos a una lista inexistente llamada my_list_nonexisted.

RPUSHX my_list_nonexisted ata1 ata2 ata3

Puede ver en el siguiente resultado que no hay elementos (0) se agregaron a la lista ya que la lista no existe.

Agregar miembros al encabezado de una lista inexistente
Agregar miembros al encabezado de una lista inexistente

Ahora, ejecute el siguiente comando para agregar varios miembros al encabezado de una lista inexistente llamada my_list_not_existed.

Al igual que RPUSHX, el LPUSHX El comando agrega elementos al encabezado de una lista solo si la lista especificada existe. Si la lista especificada no existe, no se realiza ninguna operación.

LPUSHX my_list_not_existed ata1 ata2 ata3 ata4

Puede ver en el resultado a continuación que no se agregaron elementos (0) a la lista desde la lista especificada (mi_lista_no_existida) no existe.

Agregar miembros al encabezado de una lista inexistente
Agregar miembros al encabezado de una lista inexistente

Recuperar elementos de la lista de Redis

Agregar datos a su lista de Redis no es lo único que necesita para crear una aplicación. Sin duda, su aplicación necesita recuperar elementos de su lista de Redis.

Para recuperar elementos de su lista de Redis, ejecutará el LINDEX dominio. Este comando devuelve elementos en índices específicos en una lista.

El índice de base cero se utiliza para especificar la posición de un elemento en una lista. El índice 0 representa el primer elemento de la lista, 1 representa el siguiente elemento/segundo, y así sucesivamente.

1. Ejecute los siguientes comandos LINDEX para recuperar el primer, segundo y tercer elemento de la lista my_member2.

LINDEX my_member2 0
LINDEX my_member2 1
LINDEX my_member2 2

A continuación, sólo tres elementos fueron recuperados de la lista por los índices correspondientes:

  • El ata4 elemento está en el primer índice (0).
  • El ata3 El elemento está en el segundo índice (1).
  • El elemento ata2 está en el tercer índice (2).

Como recordará, agregó estos elementos a la lista my_member2 usando el comando LPUSH. Este resultado confirma que los elementos se agregaron a la lista como se esperaba.

Recuperando el primer, segundo y tercer elemento.
Recuperando el primer, segundo y tercer elemento.

2. A continuación, ejecute el siguiente comando LRANGE para recuperar los primeros cinco elementos (0 5) de la lista my_member en lugar de un solo elemento.

Puede ver en el resultado a continuación que Redis recuperó todos los elementos de la lista my_member.

Recuperar todos los miembros de una lista (my_member)
Recuperar todos los miembros de una lista (my_member)

3. Finalmente, ejecute el siguiente comando para recuperar solo los últimos cinco miembros de la lista my_member2. Especifique las posiciones de inicio (-5) y parada (-1) para el rango de elementos que está recuperando.

Utilice índices negativos para recuperar datos del final de la lista de la siguiente manera:

  • El índice -1 representa el último elemento de una lista.
  • El índice -2 representa el penúltimo elemento.
Recuperar sólo los últimos cinco elementos de una lista (my_member2)
Recuperar sólo los últimos cinco elementos de una lista (my_member2)

Eliminar elementos antiguos

Agregar elementos a su lista consume memoria, especialmente si aún conserva los que no utiliza. Lo bueno es que Redis te permite eliminar elementos antiguos con el comando LREM. Haga espacio para otros nuevos y ahorre memoria.

El LREM El comando toma la lista (key), el número de artículos (count) para eliminar, y el element valor como argumentos en la sintaxis siguiente.

El count El argumento puede tomar los siguientes valores:

  • count = 0: elimina todos los elementos que coinciden con el valor del elemento de una lista.
  • recuento > 0: elimina el número de elementos que coinciden con el valor del elemento del encabezado de una lista.
  • recuento <0: elimina el número de elementos que coinciden con el valor del elemento del final de la lista.

Para ver como el LREM El comando elimina elementos antiguos de tus listas:

1. Ejecute el siguiente comando LREM para eliminar el elemento ata1 en la lista my_member.

Dado que agregó dos elementos ata1 en los ejemplos anteriores, este comando elimina el primer elemento ata1 antiguo del encabezado de la lista.

Eliminar un elemento antiguo
Eliminar un elemento antiguo

2. A continuación, ejecute el comando LRANGE a continuación para recuperar los primeros cuatro elementos (0 4) de la lista my_member.

A continuación, puede confirmar que el elemento ata1 se eliminó del encabezado de la lista my_member.

Recuperando todos los elementos
Recuperando todos los elementos

3. Ejecute el siguiente comando para eliminar todos los elementos con valores como ata1 de la lista my_member.

Eliminación de todos los elementos de ata1
Eliminación de todos los elementos de ata1

4. Por último, vuelva a ejecutar el comando LRANGE para recuperar los primeros cuatro elementos (0 3) de la lista my_member.

A continuación, puede confirmar que todos los elementos con el valor ata1 se eliminaron de la lista my_member.

Confirmación de que se eliminaron todos los elementos con valor ata1
Confirmación de que se eliminaron todos los elementos con valor ata1

Mover elementos de una lista a otra

Supongamos que migró su sitio web a un nuevo servicio de alojamiento y desea mover todos sus usuarios de la lista anterior a la nueva. Si es así, la lista de Redis todavía está a la altura de la tarea con el RPOPLPUSH dominio. El comando RPOPLPUSH le permite mover elementos de una lista a otra.

Ejecute lo siguiente RPOPLPUSH comando para mover todos los elementos del my_member2 a my_member3 lista.

RPOPLPUSH my_member2 my_member3

El RPOPLPUSH El comando mueve un elemento a la vez. Entonces, si tiene cinco elementos en una lista, ejecutará el mismo comando cinco veces, como se muestra a continuación. Y después de mover todos los elementos, recibirás un (nulo) producción.

Ejecutar el mismo comando para mover elementos uno a la vez puede resultar tedioso, especialmente si mueves toneladas de ellos. Por supuesto, es posible que desees mover todos los elementos de una sola vez implementando un bucle en el código de tu aplicación. Aprender a administrar Redis Sorted Set también será útil.

Mover elementos de una lista a otra
Mover elementos de una lista a otra

Ahora, ejecuta lo siguiente LRANGE comando para recuperar todos los elementos en el my_member3 lista.

El siguiente resultado confirma que todos los miembros están ahora en la lista de destino (my_member3).

Ver elementos en la lista de destinos (my_member3)
Ver elementos en la lista de destinos (my_member3)

Bloquear operaciones en una lista

La primitiva de bloqueo de ventanas emergentes (BLPOP) para listas es un comando de Redis que devuelve el primer elemento de una lista, si está disponible. BLPOP también bloquea al cliente durante un tiempo específico antes de ejecutar cualquier comando.

Bloquear comandos, como BLPOP, son útiles en muchas situaciones. Por ejemplo, es posible que desee esperar un nuevo trabajo de una cola o una nueva notificación que llegue de algún otro sistema.

Tenga en cuenta que bloquear comandos no bloquea el servidor sino solo la conexión que llama al comando.

Cuando su aplicación llama BLPOPusted proporciona una o más claves (es decir, list1, list2y list3), Como se muestra abajo.

Redis comprueba si alguna de las claves contiene una lista que no esté vacía. Si es así, se extrae un elemento del encabezado de esta lista. Luego, el elemento se devuelve a su aplicación junto con el nombre de la clave de donde se tomó.

Para ver como el BLPOP El comando funciona:

1. Ejecute el siguiente comando RPUSH para insertar algunos datos en la lista1.

RPUSH list1 ata1 ata2 ata3
Agregar datos a la lista list1
Agregar datos a la lista list1

2. Ahora, ejecute el siguiente comando BLPOP para bloquear la conexión del cliente si al menos una de las listas especificadas no está vacía y espere (0) segundos para que lleguen nuevos datos.

El límite de tiempo también se puede especificar como -1, lo que significa que no hay límite de tiempo. Y Redis bloqueará la conexión indefinidamente si las listas están vacías.

Si no llegan datos nuevos después del límite de tiempo especificado, Redis devuelve dos elementos si al menos una lista no está vacía, como se muestra a continuación.

El primer elemento es el nombre de la lista de la que se tomaron los datos (de la lista1 ya que la lista2 no existe). El segundo elemento son los datos reales de la lista (lista1).

Bloquear la conexión hasta que se cumpla la condición
Bloquear la conexión hasta que se cumpla la condición

Cuando se agrega un nuevo elemento a una de las listas, Redis activa su conexión. Luego, Redis devuelve el elemento junto con el nombre de la clave de donde se tomó.

Conclusión

En este tutorial, aprendió cómo administrar una lista de Redis. Ha visto comandos para agregar, eliminar y recuperar datos dinámicamente en una lista de Redis. Además, aprendió a bloquear comandos y cómo se pueden usar con listas de Redis.

Recuerde practicar todos los diferentes comandos de Redis para tener confianza al usarlos. ¿Por qué no intentar implementar listas de Redis en sus propios proyectos? Puedes usar Lista de Redis con Node.js para almacenar datos como sesiones de usuario, colas de mensajes, etc. También puede usar listas con otros tipos de datos para crear estructuras de datos más complejas como gráficos y árboles.

Written by

Leave a comment