Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Sorted Set

Utilizzare le operazioni di base supportate dal DBMS NoSQL Redis, finalizzate alla gestione de Sorted Set, insiemi di dati non duplicati ma ordinabili.
Utilizzare le operazioni di base supportate dal DBMS NoSQL Redis, finalizzate alla gestione de Sorted Set, insiemi di dati non duplicati ma ordinabili.
Link copiato negli appunti

I Sorted Set sono una tipologia evoluta di insiemi che permettono di inserire stringhe associate ad un punteggio,
detto score: quest'ulteriore dato permette di ordinare il contenuto della
struttura dati. Le stringhe devono essere univoche mentre i punteggi possono essere ripetuti. Per il resto, il
funzionamento di queste strutture ricalca quello dei normali Set sia nelle finalità (raccogliere elementi non duplicati senza memorizzazione della posizione) sia nel genere di operazioni implementate. Gli esempi che seguono utilizzano un Sorted Set
per la gestione di un torneo sportivo cui partecipano quattro squadre (i Lupi, le Volpi,
i Tassi e le Alci). Ogni stringa rappresenta il nome di una compagine, mentre lo score rappresenta i punti conquistati da ognuna di esse.

Inserimento, conta e rimozione di elementi

Iniziamo a sperimentare i Sorted Set attivando le principali operazioni di base. Per l'inserimento si usa la funzione
ZADD alla quale vanno fornite la chiave del Sorted Set, la
stringa da memorizzare ed il punteggio associato:

> ZADD torneo 8 Lupi
(integer) 1

Abbiamo inserito così i punti dei Lupi: il risultato 1 indica che la stringa non esisteva ancora e ciò
ha comportato un nuovo inserimento. Se volessimo modificare il valore appena inserito potremmo eseguire nuovamente ZADD ricevendo però uno 0 come
risultato in quanto non c'è stato un vero e proprio inserimento, bensì una modifica:

> ZADD torneo 6 Lupi
(integer) 0

È previsto anche l'inserimento multiplo che richiede l'utilizzo di una sola invocazione di ZADD con la fornitura di più coppie
punteggio/stringa:

> ZADD torneo 1 Alci 2 Volpi 1 Tassi
(integer) 3

Per completare il discorso riguardante il funzionamento di ZADD, si consideri che la versione 3.0.2 di Redis ha aggiunto
alcune interessanti opzioni, tra cui XX che impone solo l'aggiornamento di valori senza nessun nuovo inserimento, e NX che, viceversa, vieta l'aggiornamento e permette solo l'aggiunta di nuovi elementi. Come si può immaginare, NX e XX sono mutuamente
esclusive, pertanto se ne potrà applicare solo una delle due alla volta. Contestualmente ad esse, è stata aggiunta anche l'opzione
CH che cambia il significato del valore intero restituito che non indicherà più il numero di nuovi elementi inseriti ma di
quelli modificati.

Per ottenere il numero di elementi disponibili in un Sorted Set abbiamo due possibilità. La prima vede
l'impiego di ZCARD per la restituzione del numero
complessivo di elementi:

> ZCARD torneo
(integer) 4

La seconda annovera ZCOUNT per sapere il numero di elementi che
rientra in un determinato range di punteggi del quale specifichiamo il limite minimo e massimo (entrambi inclusivi):

> ZCOUNT torneo 1 2
(integer) 3
> ZCOUNT torneo 3 10
(integer) 1

Se si vuole direttamente incrementare il valore del punteggio si può usare ZINCRBY.
Proseguendo con il nostro esempio, supponiamo che i Lupi abbiano pareggiato con le Volpi e i Tassi abbiano battuto le Alci. Dovremo quindi
modificare i punteggi in questo modo:

> ZINCRBY torneo 3 Tassi
 "4"
> ZINCRBY torneo 1 Lupi
 "7"
> ZINCRBY torneo 1 Volpi
 "3"

Il risultato restituito notifica il nuovo punteggio raggiunto.

A conclusione del paragrafo, citiamo il comando ZREM
per la rimozione di uno o più elementi:

> ZREM torneo Lupi
  1
> ZREM torneo Tassi Volpi
  2

Con i precedenti comandi, abbiamo eseguito prima una rimozione singola, e poi una multipla. Il numero
intero che viene restituito indica quanti elementi sono stati rimossi: un risultato 0 significa che gli
elementi da cancellare non sono stati rinvenuti.

Recupero di informazioni

Una delle prime operazioni di lettura che può venire in mente di svolgere è il recupero del punteggio di un
singolo elemento, compito di cui si occupa ZSCORE:

> ZSCORE torneo Lupi
  "6"

In questo caso, abbiamo acquisito la notizia che i Lupi hanno totalizzato 6 punti. La funzione ZRANGE
permette di ottenere un sottinsieme di elementi presenti nel Sorted Set: siamo obbligati a specificare il posizionamento di partenza
e di fine (secondo l'ordinamento crescente di punteggi). Con l'aggiunta di WITHSCORES, vengono restituiti anche i punteggi che appariranno
alternati con i corrispondenti valori. Se si indica -1 come indice di arrivo, vengono restituiti tutti gli elementi presenti a
partire dalla posizione di partenza:

> ZRANGE torneo 0 1
1) "Alci"
2) "Volpi"
> ZRANGE torneo 0 6 WITHSCORES
1) "Alci"
2) "1"
3) "Volpi"
4) "2"
5) "Tassi"
6) "4"
7) "Lupi"
8) "6"
> ZRANGE torneo 0 -1
1) "Alci"
2) "Volpi"
3) "Tassi"
4) "Lupi"

Utilizzando altrimenti la variante ZRANGEBYSCORE,
si può selezionare un intervallo di punteggi da restituire:

> ZRANGEBYSCORE torneo 2 4
1) "Volpi"
2) "Tassi"
> ZRANGEBYSCORE torneo 2 4 WITHSCORES
1) "Volpi"
"2"
2) "Tassi"
"4"

Se si vuole recuperare la posizione dell'elemento nell'ambito del Sorted Set, si può usare la funzione
ZRANK. Si ricordi, in proposito, che le posizioni
vengono contate a partire da 0 e che i punteggi, di base, vengono ordinati in senso crescente. Quindi, nel nostro
esempio, se chiederemo la posizione dei Lupi (squadra attualmente in testa), su un torneo di quattro squadre ci verrà risposto 3 ossia l'ultima
posizione contando da zero per ordinamento crescente:

> ZRANK torneo Lupi
(integer) 3

Per risolvere i problemi di ordinamento, esistono i comandi ZREVRANGE,
ZREVRANGEBYSCORE e ZREVRANK
che svolgono gli stessi compiti, rispettivamente, di ZRANGE, ZRANGEBYSCORE e ZRANK ma in ordine decrescente di punteggio:

> ZREVRANGE torneo 0 -1 WITHSCORES
1) "Lupi"
2) "6"
3) "Tassi"
4) "4"
5) "Volpi"
6) "2"
7) "Alci"
8) "1"
> ZRANGEBYSCORE torneo 4 2 WITHSCORES
1) "Tassi"
"4"
2) "Volpi"
"2"
> ZREVRANK torneo Lupi
(integer) 0

Ti consigliamo anche