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.