Guía de Operaciones con Listas en Redis

Comandos Fundamentales para Listas en Redis

Las listas en Redis son secuencias ordenadas que soportan inserciones y extracciones en ambos extremos. Los comandos relacionados suelen iniciar con la letra l, sin distinguir entre mayúsculas y minúsculas.

Inserción y Visualización de Elementos

Para añadir elementos a una lista, se pueden usar lpush (izquierda) o rpush (derecha). La consulta se realiza con lrange, especificando un rango de índices.

# Insertar elementos desde la izquierda
# Insertar elementos desde la derecha
# Obtener elementos entre los índices especificados
127.0.0.1:6379> lpush lista_tareas tarea1
(integer) 1
127.0.0.1:6379> lpush lista_tareas tarea2
(integer) 2
127.0.0.1:6379> lpush lista_tareas tarea3
(integer) 3
127.0.0.1:6379> get lista_tareas
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> lrange lista_tareas 0 -1
1) "tarea3"
2) "tarea2"
3) "tarea1"
127.0.0.1:6379> lrange lista_tareas 0 2
1) "tarea3"
2) "tarea2"
3) "tarea1"
127.0.0.1:6379> rpush lista_tareas tarea_nueva
(integer) 4
127.0.0.1:6379> lrange lista_tareas 0 -1
1) "tarea3"
2) "tarea2"
3) "tarea1"
4) "tarea_nueva"

Eliminación y Acceso por Índice

Se pueden eliminar elementos con lpop (izquierda) o rpop (derecha). Para recuperar un elemento en una posición específica, se utiliza lindex.

# Quitar el primer elemento de la izquierda
# Quitar el primer elemento de la derecha
# Acceder al elemento en un índice determinado
127.0.0.1:6379> lpop lista_tareas
"tarea3"
127.0.0.1:6379> rpop lista_tareas
"tarea_nueva"
127.0.0.1:6379> lrange lista_tareas 0 -1
1) "tarea2"
2) "tarea1"
127.0.0.1:6379> lindex lista_tareas 0
"tarea2"
127.0.0.1:6379> lindex lista_tareas 1
"tarea1"

Longitud y Eliminación Selectiva

La longitud de una lista se obtiene con llen. Para eliminar ocurrencias específicas, se emplea lrem, indicando la cantidad y el valor a borrar.

# Determinar el número de elementos
# Remover un número específico de instancias de un valor
127.0.0.1:6379> llen lista_tareas
(integer) 2
127.0.0.1:6379> lpush lista_tareas tarea_duplicada
(integer) 3
127.0.0.1:6379> lpush lista_tareas tarea_duplicada
(integer) 4
127.0.0.1:6379> lrange lista_tareas 0 -1
1) "tarea_duplicada"
2) "tarea_duplicada"
3) "tarea2"
4) "tarea1"
127.0.0.1:6379> lrem lista_tareas 1 tarea_duplicada
(integer) 1
127.0.0.1:6379> lrange lista_tareas 0 -1
1) "tarea_duplicada"
2) "tarea2"
3) "tarea1"

Recorte de Listas

El comando ltrim permite reducir una lista a un segmento específico, eliminando los elementos fuera de rango.

# Conservar solo los elementos entre los índices dados
127.0.0.1:6379> lpush lista_datos valorA
(integer) 1
127.0.0.1:6379> lpush lista_datos valorB
(integer) 2
127.0.0.1:6379> lpush lista_datos valorC
(integer) 3
127.0.0.1:6379> lrange lista_datos 0 -1
1) "valorC"
2) "valorB"
3) "valorA"
127.0.0.1:6379> ltrim lista_datos 0 1
OK
127.0.0.1:6379> lrange lista_datos 0 -1
1) "valorC"
2) "valorB"

Transferencia entre Listas

Con rpoplpush, se extrae el último elemento de una lista origen y se inserta al inicio de una lista destino.

# Mover el último elemento de una lista a otra
127.0.0.1:6379> rpush origen elem1
(integer) 1
127.0.0.1:6379> rpush origen elem2
(integer) 2
127.0.0.1:6379> rpush origen elem3
(integer) 3
127.0.0.1:6379> lrange origen 0 -1
1) "elem1"
2) "elem2"
3) "elem3"
127.0.0.1:6379> rpoplpush origen destino
"elem3"
127.0.0.1:6379> lrange origen 0 -1
1) "elem1"
2) "elem2"
127.0.0.1:6379> lrange destino 0 -1
1) "elem3"

Modificación de Valores

Para actualizar un elemento en una posición específica, se usa lset. La lista debe existir previamente; de lo contrario, se genera un error.

# Asignar un nuevo valor a un índice particular
127.0.0.1:6379> lset lista_prueba 0 valorX
(error) ERR no such key
127.0.0.1:6379> lpush lista_prueba valor_inicial
(integer) 1
127.0.0.1:6379> lset lista_prueba 0 valor_actualizado
OK
127.0.0.1:6379> lrange lista_prueba 0 -1
1) "valor_actualizado"

Inserción Relativa

El comando linsert permite insertar un valor antes o después de un elemento existente, denominado pivote.

# Añadir un elemento antes o después de otro
127.0.0.1:6379> rpush datos primario
(integer) 1
127.0.0.1:6379> rpush datos secundario
(integer) 2
127.0.0.1:6379> lrange datos 0 -1
1) "primario"
2) "secundario"
127.0.0.1:6379> linsert datos before primario previo
(integer) 3
127.0.0.1:6379> lrange datos 0 -1
1) "previo"
2) "primario"
3) "secundario"
127.0.0.1:6379> linsert datos after primario intermedio
(integer) 4
127.0.0.1:6379> lrange datos 0 -1
1) "previo"
2) "primario"
3) "intermedio"
4) "secundario"

Consideraciones de Implementación

  • Las listas se implementan como listas enlazadas, permitiendo inserciones eficientes en ambos extremos.
  • Si la clave no existe al insertar, se crea una nueva lista automáticamente.
  • Al eliminar todos los elementos, la lista se considera vacía y la clave puede ser eliminada.
  • Las operaciones en los extrmeos son de complejidad constante, mientras que las modificaciones en el centro pueden requerir recorridos adicionales.

Etiquetas: Redis listas comandos-redis estructuras-datos bases-datos-en-memoria

Publicado el 6-29 08:21