Introduzione ai set ordinati di Redis

Introduzione ai set ordinati di Redis
I set ordinati Redis sono una versione più avanzata dei set. Un set ordinato eredita tutte le proprietà dalla struttura dei dati del set di Redis. Inoltre, mantengono l'ordine degli elementi tenuti. Ogni membro di un set ordinato ha un punteggio utilizzato per ordinare gli elementi del set in ordine crescente.

I set ordinati sono molto veloci nell'aggiunta, nell'aggiornamento e nella rimozione dei loro membri. Ha una complessità del tempo logaritmico su tutte queste operazioni. Poiché i membri sono ordinati, l'accesso all'elemento medio è anche molto efficiente. Pertanto, il set ordinato sarebbe l'ideale per l'implementazione di applicazioni in tempo reale come classifiche di gioco online, code prioritarie a bassa latenza e indici secondari.

Il comando ZADD

Sono disponibili diversi comandi per operare su set ordinati. IL Zadd Il comando viene utilizzato per aggiungere uno o più membri con punteggi a un set ordinato memorizzato in una determinata chiave. La complessità temporale di questo comando è proporzionale al logaritmo del numero di elementi. Quindi, è molto più veloce della maggior parte degli altri comandi Redis.

Ogni volta che aggiungiamo membri utilizzando il comando ZADD, ci sono alcuni effetti diretti che si svolgono nel set ordinato.

Poiché un set ordinato contiene un set unico di membri, non consente l'aggiunta di membri già specificati nel set ordinato. Invece, aggiornerà il punteggio di quel particolare membro e posizionerà quell'elemento all'indice giusto per mantenere l'ordine corretto.

Se il tasto set ordinato non esiste, il comando ZADD creerà il set ordinato e aggiungerà tutti i membri specificati.

Se la chiave esiste ma non dovrebbe contenere un valore di tipo set ordinato, aumenterà un errore.

Sintassi

Zadd [Nx | XX] [GT | Lt] [ch] [incr] [Membro del punteggio ...]

Di solito, il comando ZADD restituisce il numero di membri aggiunti al set ordinato. Quindi, ignora gli aggiornamenti del punteggio per i membri già esistenti. Questo valore di reso cambierà se il Cap l'opzione è specificata. Quindi il conteggio di tutti i membri modificati verrà restituito dal comando ZADD. Questo conteggio include la somma dei membri appena aggiunti e il punteggio modificato.

Esempio 01 - classifica di gioco online

Supponiamo che uno scenario in cui dobbiamo gestire una classifica per utenti per un gioco di avventura online giocato da migliaia di utenti in tutto il mondo. La natura del gioco è che ogni utente guadagna oro per completamento con successo di ogni missione. Il set ordinato Redis sarebbe la struttura dei dati ideale che possiamo utilizzare per questo tipo di applicazione a bassa latenza in tempo reale.

Creeremo un set ordinato identificato dalla chiave Gamleaderboard. Inoltre, diversi giocatori verranno aggiunti come set ordinati con punteggi diversi. L'importo dell'oro guadagnato da ogni utente verrà mappato come punteggio set ordinato.

Aggiunta di più membri con ZADD

Zadd Gamleaderboard 2300 Gamer: 1 1400 Gamer: 2 800 Gamer: 3 3500 Gamer: 4 4000 Gamer: 5

Produzione:

Come previsto, il valore di reso è 5. È il numero di membri aggiunti al set ordinato memorizzato nella chiave Gamleaderboard.

Controlliamo se il set ordinato contiene tutti i membri in modo ordinato. Possiamo usare il comando zrange per interrogare tutti i membri con i loro punteggi come mostrato da segue:

zrange gamleaderboard 0 10 withscores

Come accennato, il Gamleaderboard Set set ordina i suoi membri in ordine crescente in base ai loro punteggi.

Aggiunta un nuovo membro con lo stesso punteggio del membro esistente

Proviamo ad aggiungere un altro utente Gamer: 6 Con la quantità d'oro di 3500. I set ordinati Redis consentono di inserire i membri con lo stesso valore del punteggio. Quindi, questa operazione dovrebbe aggiungere correttamente il Gamer: 6.

Zadd Gamleaderboard 3500 Gamer: 6

Produzione:

Come previsto, il valore di reso è 1 che verifica che il membro sia stato aggiunto con successo.

Ispezioniamo di nuovo i membri del set ordinato usando il comando zrange.

Il membro Gamer: 6 è stato inserito subito dopo il Gamer: 4. Set ordinati Redis Utilizzare l'ordine lessicografico se i valori del punteggio sono gli stessi per i membri specificati. Confronta le stringhe dei membri come una matrice di byte e le ordina di conseguenza.

Utilizzo delle opzioni NX e XX con ZADD

Supponiamo che dobbiamo solo aggiornare il punteggio di un membro esistente e non aggiungere nuovi membri al set ordinato Gamleaderboard. IL Xx l'opzione viene utilizzata per raggiungere questo obiettivo.

Zadd Gamleaderboard XX 3500 Gamer: 7 3000 Gamer: 5

Come previsto, il valore di reso è 0, il che significa che non sono stati aggiunti nuovi membri. Ispezioneremo di nuovo il set ordinato.

IL Gamer: 7 il membro non è stato aggiunto al set ordinato ma il Gamer: 5 Il punteggio del membro è stato modificato ed è posizionato di conseguenza.

IL Nx l'opzione fa l'esatto contrario del Xx.

Zadd Gamleaderboard NX 5500 Gamer: 7 4000 Gamer: 5

Ispezioniamo di nuovo il set ordinato.

Come indicato sopra, il nuovo membro Gamer: 7 è stato aggiunto con successo. IL Gamer: 5 Il valore del punteggio non è stato modificato.

Utilizzo delle opzioni LT e GT con ZADD

Le opzioni LT e GT sono molto utili quando è necessario aggiornare i valori del punteggio condizionatamente. Ognuno di questi due flag non impedirà di aggiungere nuovi elementi al set ordinato.

Ogni volta che si specifica l'opzione LT con il comando ZADD, modificherà il valore del punteggio se e solo se il nuovo punteggio è inferiore al punteggio corrente di quell'elemento. L'opzione GT modificherà il punteggio solo se il nuovo punteggio è maggiore del punteggio corrente.

Zadd Gamleaderboard Lt 2100 Gamer: 1 1500 Gamer: 2

Ispezioniamo il Gamleaderboard set ordinato.

Come puoi vedere, il Gamer: 1 Il punteggio precedente del membro era 2300. Quindi, il punteggio è stato cambiato con questa operazione ed è stato cambiato in 2100. IL Gamer: 2-Il punteggio del membro non è cambiato poiché il suo punteggio precedente era inferiore al nuovo punteggio.

L'opzione CH

Di solito, il comando ZADD restituisce il numero di membri aggiunti. Con l'opzione CH, restituirà la somma dei membri esistenti di recente aggiunta e i cui punteggi vengono modificati.

Zadd Gamleaderboard CH 2100 Gamer: 8 1500 Gamer: 2 3550 Gamer: 4

All'esecuzione del comando sopra, il Gamer: 8 Il membro deve essere aggiunto. IL Gamer: 2 E Gamer: 4 I valori di punteggio dei membri devono essere modificati. Quindi, la somma dei membri appena aggiunti e modificati è 3.

Utilizzo Di Opzione incring in ZADD

IL Inc L'opzione increverà il punteggio di un membro con il numero di incremento specificato. Il comando ZADD si comporta esattamente come zincrby.

Incremiamo il Gamer: 7 Punteggio del membro di altri 100 come mostrato nel seguente

Zadd Gamleaderboard INTR 100 Gamer: 7

Come previsto, il valore del punteggio precedente è stato incrementato di 100. Il nuovo punteggio viene restituito come 5600.

Conclusione

Il set ordinato Redis è una struttura di dati più avanzata che eredita tutte le proprietà dai set ordinari. I set ordinati sono molto più veloci della maggior parte dei comandi Redis. Quindi, i set ordinati sono ampiamente utilizzati nelle applicazioni a bassa latenza in tempo reale. Il comando ZADD viene utilizzato per creare un set ordinato su una chiave specificata con più membri. I membri sono ordinati in base ai loro valori di punteggio. Ogni volta che i valori del punteggio sono gli stessi per più membri, l'ordinamento verrà eseguito utilizzando l'ordinamento lessicografico.