Omet navegació

2.3.4 - List

Les Llistes en Redis són llistes de Strings ordenades, on cada element està associat a un índex de la llista. Es poden recuperar els elements tant de forma ordenada (per l'índex) com accedint directament a una posició.

Els elements es poden afegir al principi, al final o també en una posició determinada.

La llista es crea en el moment en què s'insereix el primer element, i desapareix quan llevem l'últim element que quede.

Estan molt ben optimitzades per a la inserció i per a la consulta.

Els comandos que afecten a les llistes comencen quasi tots per L, excepte alguns que comencen per R indicant que fan l'operació per la dreta.

Per cert, els valors dels elements es poden repetir.

La llista de comandos que afecten a llistes que veurem és:

lpush  ,  rpush  ,  lpop  ,  rpop  ,  lset  ,  lindex  ,  linsert  ,  lrange  ,  llen  ,  lrem  ,  ltrim

LPUSH

Sintaxi

lpush clau valor1 valor2 valorN

Introdueix els valors a la llista (creant la clau si és necessari). Les insereix en la primera posició, o també podríem dir que per l'esquerra (Left PUSH), imaginant que els elements estan ordenats d'esquerra a dreta. Si posem més d'un valor, s'aniran introduint sempre en la primera posició. El comando tornarà el número d'elements (strings) de la llista després de la inserció.

Exemples

127.0.0.1:6379> lpush llista1 primera segona tercera
(integer) 3

127.0.0.1:6379> lrange llista1 0 -1
1) "tercera"
2) "segona"
3) "primera"

127.0.0.1:6379> lpush llista1 quarta cinquena
(integer) 5

127.0.0.1:6379> lrange llista1 0 -1
1) "cinquena"
2) "quarta"
3) "tercera"
4) "segona"
5) "primera"

Nota

Per a veure el contingut de la llista utilitzarem el comando lrange llista 0 -1, que torna la llista sencera. Veurem de forma més completa aquest comando amb posterioritat.

RPUSH

Sintaxi

rpush clau valor1 valor2 valorN

Introdueix els valors a la llista (creant la clau si és necessari). Les insereix en l'última posició, o també podríem dir que per la dreta (Right PUSH), imaginant que els elements estan ordenats d'esquerra a dreta.  El comando tornarà el número d'elements (strings) de la llista després de la inserció.

Exemples

127.0.0.1:6379> rpush llista1 sisena setena
(integer) 7

127.0.0.1:6379> lrange llista1 0 -1
1) "cinquena"
2) "quarta"
3) "tercera"
4) "segona"
5) "primera"
6) "sisena"
7) "setena"

LPOP

Sintaxi

lpop clau

Torna i elimina el primer element (el de més a l'esquerra).

Exemples

127.0.0.1:6379> lpop llista1
"cinquena"

127.0.0.1:6379> lrange llista1 0 -1
1) "quarta"
2) "tercera"
3) "segona"
4) "primera"
5) "sisena"
6) "setena"

RPOP

Sintaxi

rpop clau

Torna i elimina l'últim element (el de més a la dreta).

Exemples

127.0.0.1:6379> rpop llista1
"setena"

127.0.0.1:6379> lrange llista1 0 -1
1) "quarta"
2) "tercera"
3) "segona"
4) "primera"
5) "sisena"

LSET

Sintaxi

lset clau index valor

Substitueix el valor de la posició indicada per l'índex. Tant la clau com l'element de la posició indicada han d'existir, sinó donarà error. Ara la L no significa Left sinó List.

La primera posició és la 0. I també es poden posar números negatius: -1 és l'últim, -2 el penúltim, ...

Exemples

127.0.0.1:6379> lset llista1 2 quarta
OK

127.0.0.1:6379> lrange llista1 0 -1
1) "quarta"
2) "tercera"
3) "quarta"
4) "primera"
5) "sisena"

127.0.0.1:6379> lset llista1 -1 cinquena
OK

127.0.0.1:6379> lrange llista1 0 -1
1) "quarta"
2) "tercera"
3) "quarta"
4) "primera"
5) "cinquena"

Observeu com es poden repetir els valors

LINDEX

Sintaxi

lindex clau index

Torna l'element situat en la posició indicada per l'índex, però sense eliminar-lo de la llista.

Exemples

127.0.0.1:6379> lrange llista1 0 -1
1) "quarta"
2) "tercera"
3) "quarta"
4) "primera"
5) "cinquena"

127.0.0.1:6379> lindex llista1 0
"quarta"

127.0.0.1:6379> lindex llista1 3
"primera"

127.0.0.1:6379> lindex llista1 -1
"cinquena"

127.0.0.1:6379> lrange llista1 0 -1
1) "quarta"
2) "tercera"
3) "quarta"
4) "primera"
5) "cinquena"

LINSERT

Sintaxi

linsert clau BEFORE | AFTER valor1 valor2

Insereix el valor2 abans o després (segons el que triem) de la primera vegada que troba el valor1. No substitueix, sinó que insereix en una determinada posició. Els elements que van després de l'element introduït veuran actualitzat el seu índex.

Exemples

127.0.0.1:6379> lrange llista1 0 -1
1) "quarta"
2) "tercera"
3) "quarta"
4) "primera"
5) "cinquena"

127.0.0.1:6379> linsert llista1 AFTER quarta segona
(integer) 6

127.0.0.1:6379> lrange llista1 0 -1
1) "quarta"
2) "segona"
3) "tercera"
4) "quarta"
5) "primera"
6) "cinquena"

127.0.0.1:6379> linsert llista1 BEFORE cinquena sisena
(integer) 7

127.0.0.1:6379> lrange llista1 0 -1
1) "quarta"
2) "segona"
3) "tercera"
4) "quarta"
5) "primera"
6) "sisena"
7) "cinquena"

Si intentem inserir abans o després un element que no existeix, tornarà -1 indicant que no l'ha trobat i no farà la inserció.

127.0.0.1:6379> linsert llista1 BEFORE desena setena
(integer) -1

127.0.0.1:6379> lrange llista1 0 -1
1) "quarta"
2) "segona"
3) "tercera"
4) "quarta"
5) "primera"
6) "sisena"
7) "cinquena"

LRANGE

Sintaxi

lrange clau inici final

Torna els elements de la llista que hi ha entre els index inici i final, ambdós inclosos. El primer element és el 0. Es poden posar valors negatius, sent -1 l'últim, -2 el penúltim, ...

Exemples

127.0.0.1:6379> lrange llista1 0 -1
1) "quarta"
2) "segona"
3) "tercera"
4) "quarta"
5) "primera"
6) "sisena"
7) "cinquena"

127.0.0.1:6379> lrange llista1 2 4
1) "tercera"
2) "quarta"
3) "primera"

127.0.0.1:6379> lrange llista1 1 -2
1) "segona"
2) "tercera"
3) "quarta"
4) "primera"
5) "sisena"

127.0.0.1:6379> lrange llista1 4 4
1) "primera"

LLEN

Sintaxi

llen clau

Torna el número d'elements de la llista

Exemples

127.0.0.1:6379> llen llista1
(integer) 7

LREM

Sintaxi

lrem clau número valor

Elimina elements de la llista que coincidisquen amb el valor proporcionat. Ja sabem que els valors es poden repetir. Amb el número indiquem quants elements volem que s'esborren: si posem 1 s'esborrarà el primer element amb aquest valor, si posem 2 s'esborraran els dos primers elements (els de més a l'esquerra) que tingen aquest valor. Si posem 0 s'esborraran tots els elements amb aquest valor

Exemples

127.0.0.1:6379> rpush llista1 segona
(integer) 8

127.0.0.1:6379> lrange llista1 0 -1
1) "quarta"
2) "segona"
3) "tercera"
4) "quarta"
5) "primera"
6) "sisena"
7) "cinquena"
8) "segona"

127.0.0.1:6379> lrem llista1 1 segona
(integer) 1

127.0.0.1:6379> lrange llista1 0 -1
1) "quarta"
2) "tercera"
3) "quarta"
4) "primera"
5) "sisena"
6) "cinquena"
7) "segona"

127.0.0.1:6379> lrem llista1 0 quarta
(integer) 2

127.0.0.1:6379> lrange llista1 0 -1
1) "tercera"
2) "primera"
3) "sisena"
4) "cinquena"
5) "segona"

LTRIM

Sintaxi

ltrim clau inici final

Elimina els elements que queden fora dels índex inici i final, és a dir elimina els que estiguen a l'esquerra d'inici, i els que estiguen a la dreta de final.

Exemples

127.0.0.1:6379> ltrim llista1 1 -2
OK

127.0.0.1:6379> lrange llista1 0 -1
1) "primera"
2) "sisena"
3) "cinquena"