Redis Zscan

Redis Zscan

Iterare sui membri di un set ordinato

Come tutti sapete, i set ordinati Redis sono derivati ​​dai set regolari in cui ciascun membro è ordinato dal suo valore di punteggio in ordine crescente. Se due o più membri hanno lo stesso valore di punteggio, sono ordinati per ordine lessicografico. Di solito, i membri e i punteggi possono essere recuperati direttamente utilizzando il comando zrange. Quando hai un grande set ordinato con migliaia di membri, il comando zrange potrebbe bloccare il server per molto tempo come i comandi Smembers and Keys che è uno svantaggio. Quindi, Redis offre un comando speciale chiamato Zscan che deriva dal comando di scansione per iterare sui membri di un set ordinato. Poiché il comando ZSCAN eredita dal comando di scansione, quasi tutti i comportamenti sono gli stessi del comando di scansione per uso generale.

Come nella figura data, il comando di scansione è un iteratore basato sul cursore. Quindi, ci vogliono una o più iterazioni per fornire tutti gli articoli di una collezione Redis. Poiché il comando zscan eredita dal comando di scansione genitore, il comportamento è lo stesso. In questa guida, la sintassi e i casi d'uso del comando ZSCAN saranno discussi in dettaglio.

Il comando zscan

Il comando Zscan è un iteratore a cursore che avvia l'iterazione con il cursore 0 °. Successivamente, in ogni iterazione, restituisce zero o più membri set ordinati insieme al cursore successivo che dovrebbe essere usato come cursore per la seguente chiamata di comando. Se il cursore restituito è 0 dopo una o più iterazioni, significa che il processo di scansione è finito. Tutti i membri del set ordinato vengono restituiti a questo punto. Questo processo è chiamato un'iterazione completa. Come si può vedere, il comando zscan mantiene il suo stato solo usando un cursore che porta a una consapevolezza dello stato limitata. Pertanto, i seguenti svantaggi sono associati al comando zscan.

  • Lo stesso elemento può tornare in più iterazioni.
  • Se un membro non è presente all'inizio del processo di scansione, esiste la probabilità di non restituire quel membro durante una completa iterazione.

Inoltre, non vi è alcuna garanzia sul conteggio dei membri restituiti. In alcuni casi, se il set ordinato è molto piccolo, tutti i membri potrebbero essere restituiti nella prima iterazione. Perché Redis utilizza uno speciale formato di codifica a pressione singola per trattenere i membri fino a raggiungere un numero massimo di articoli. Il comando Zscan è in grado di restituire un cursore solo se la struttura dei dati scansionata è rappresentata come tabella hash.

Sintassi:
Il comando Zscan utilizza quasi la stessa sintassi del comando di scansione, tranne per il fatto che accetta un tasto set ordinato come primo argomento. La sintassi del comando con gli argomenti consentiti è la seguente:

Cursore Zscan Sorted_Set_Key [Pattern Match] [COUNT Member_Count]

Sorted_set_key: La chiave del set ordinato.
Cursore: Il valore del cursore inizia da 0 e termina a 0 se si tratta di un'iterazione completa.

I seguenti argomenti sono opzionali:

INCONTRO: Uno schema da abbinare quando si sta recuperando gli elementi in ogni iterazione. Vengono restituiti solo i membri abbinati.
CONTARE: Il numero approssimativo di membri da restituire in ogni iterazione.

Il set di risultati restituiti per iterazione contiene un paio di elementi. La prima parte è un numero intero senza segno a 64 bit che rappresenta il cursore da passare alla chiamata successiva. La parte successiva è una serie di membri e punteggi associati.

Caso di utilizzo 1 - Recupera tutti i membri e le loro missioni completate di un gioco online

Supponiamo che una società di giochi online mantenga una classifica utilizzando il set ordinato Redis. Poiché gli utenti enormi stanno giocando attivamente al gioco, hanno bisogno di un modo per recuperare ogni giocatore e il loro punteggio associato che è il numero di missioni completate. È un must per eseguire il recupero senza bloccare il server. Quindi, la raccomandazione è quella di utilizzare il comando zscan come segue:

Innanzitutto, creiamo un set ordinato con alcuni giocatori e il numero completato di missioni.

Zadd Leaderboard 12 Player6: John 4 Player2: Mary 22 Player1: Patel 15 Player: 11 23 Player5: Ann 30 Player7: Harsh 23 Player12: Abby 2 Player13: Nicky 6 Player9: Jeremy 7 Player45: Kina

Ora, possiamo iterare sui membri del set ordinato come segue:

CAGLIORE DI ZSCAN 0

Produzione:

Il valore del cursore è 0 nel set di risultati restituiti, il che significa che tutti i membri vengono restituiti alla fine della prima iterazione. In questo caso, poiché il numero di membri è piccolo, Redis rappresenta questi membri utilizzando una codifica piena di allocazione singola. Pertanto, fino a raggiungere una dimensione massima del pacchetto o un conteggio dei membri, il comando restituisce tutti i membri nel set ordinato. Questa si chiama iterazione completa. Perché alla fine della prima iterazione, riceviamo tutti e dieci i loro punteggi. Se abbiamo centinaia di membri, è rappresentato come una tabella hash in memoria. Quindi, ci vogliono diverse iterazioni per restituire tutti i membri.

Il parametro di conteggio può essere utilizzato per limitare il numero di membri restituiti in un'iterazione. Per impostazione predefinita, questo argomento è impostato su 10. Se il set ordinato è costituito da centinaia di membri, è rappresentato da una tabella di hash nella memoria. Quindi, il numero di membri restituiti è di circa dieci per iterazione. Il valore dell'argomento del conteggio viene ignorato se il set ordinato è troppo piccolo.

Usa il caso 2: prendi i giocatori il cui nome inizia con la lettera "J"

Il comando Zscan può essere utilizzato per filtrare i membri restituiti in base a una partita di pattern. In tal caso, l'argomento della partita deve essere specificato.

Usiamo lo stesso esempio dal caso d'uso precedente. Il requisito è quello di recuperare i giocatori il cui nome inizia con la lettera "J". È solo per implementare la prossima funzione interessante relativa al gioco. L'argomento della partita può essere specificato come segue:

CAGLIORE DI ZSCAN 0 Match *J *

Questo dovrebbe idealmente restituire due membri i cui nomi sono Jeremy e John.

Conclusione

In sintesi, il comando zscan viene utilizzato per iterare sui membri e decine di un set ordinato Redis. Questo comando si comporta uguale al comando di scansione, tranne per il fatto che il comando zscan accetta la chiave imposta come il primo argomento. Come discusso nei casi d'uso, il comando ZSCAN può essere utilizzato in diversi modi specificando gli argomenti di corrispondenza e contano in cui è possibile recuperare i membri e i punteggi associati che corrispondono a uno schema specifico e limitano il conteggio dei membri restituito per iterazione. Nel complesso, il comando ZSCAN può essere utile quando si recupera i membri di un set ordinato senza bloccare il server o il client.