Redis supporta iteratori a base di cursori. Questi iteratori possono eseguire in modo incrementale attraverso la raccolta e restituire un numero limitato di elementi. Allo stesso tempo, restituisce l'indice/ID del cursore aggiornato come numero intero da utilizzare nella prossima iterazione. Un cursore è un puntatore mantenuto dall'iteratore per mantenere la nuova posizione dopo ogni iterazione.
L'iteratore di scansione
Il comando di scansione è la base per molti altri iteratori Redis. Questo iteratore non garantisce il numero di elementi restituiti in ogni loop. Potrebbe restituire 0 elementi o tutti gli elementi in una data iterazione. Inoltre, potrebbe produrre lo stesso elemento più volte perché la raccolta potrebbe cambiare, il che è uno svantaggio nell'iteratore di scansione. Il comando di scansione restituisce due valori in ciascuna esecuzione. Il primo valore è un ID di riferimento al cursore e il secondo valore è una raccolta di elementi. Inizia sempre dal cursore 0. Diversi altri iteratori derivano dall'iteratore di scansione, come SSCAN, HSCAN e ZSCAN. Questi comandi hanno lo stesso comportamento ma operano su diversi tipi di raccolte.
La completa iterazione
Poiché il comando scanta. Se il cursore restituito è 0, indica che tutti gli elementi sono stati iterati. Si chiama iterazione completa.
Il comando sscan
L'iteratore SSCAN deriva dall'iteratore di scansione. Quindi, tutti i comportamenti sono estesi dal comando di scansione, ma iterato solo sui tipi impostati.
Sintassi
Cursore SSCAN set_key [pattern match] [conteggio conteggio]set_key: Questa è la chiave del set.
cursore: ID di riferimento del seguente cursore, che viene restituito dopo ogni chiamata.
La corrispondenza e il conteggio sono due parametri opzionali che possono essere utilizzati per filtrare gli elementi restituiti in base a un determinato modello e limitare il numero di elementi restituiti.
Questo comando restituirebbe il cursore successivo e una serie di elementi. L'ID cursore restituito può essere passato al comando sscan nella chiamata successiva.
Esempio 1: iterare su un piccolo set
Creiamo un set di Redis usando il comando SADD.
SADD SETOFCOLORS rosso verde nero bianco blu blu arancione grigio viola gialloIl comando precedente creerà un nuovo set setofcolors e aggiungi 10 membri in modo non ordinato. Possiamo usare il comando Smembers per verificare l'operazione precedente.
SMARMERS SETOFCOLORSCome previsto, il set setofcolors è stato creato con successo.
Possiamo usare il comando sscan per iterare il setofcolors Impostare come mostrato nel seguente:
sscan setOfColors 0Come accennato, il comando dovrebbe iniziare con il cursore 0. Anche la chiave del set è stata passata. Dal setofcolors Contiene solo 10 membri, il comando sscan potrebbe restituire tutti gli elementi nella prima iterazione. Perché il setofcolors è un set relativamente piccolo.
Produzione
Come discusso, il comando ha restituito due valori come il primo è 0. Significa che quanto sopra è un'iterazione completa. Non è necessario chiamare di nuovo Sscan. Tutti e dieci i membri sono stati restituiti come secondo valore di ritorno di questo comando.
Esempio 2: iterare su un grande set
Creeremo un set con più di 20 membri.
SADD Alfabet A B C D E F G H I J K L M N O P Q R S T U V W X Y ZIteramiamo sul alfabeto impostato.
SSCAN Alphabet 0Come al solito, abbiamo iniziato con il cursore 0. Inoltre, il tasto set è stato approvato come il alfabeto. Ha restituito solo 11 membri dalla prima iterazione, come mostrato nella seguente:
Il prossimo cursore è 6. Chiamiamo di nuovo il comando sscan con gli argomenti pertinenti.
Ora ha restituito altri 10 membri e il cursore successivo come 13. Dobbiamo chiamare di nuovo il comando sscan per finire la completa iterazione.
Il valore del cursore restituito è 0, il che significa che l'iteratore ha iterato attraverso l'intero set.
Esempio 3: corrispondenza di pattern con sscan
Possiamo utilizzare il parametro Match per filtrare i membri restituiti in base a uno schema specificato. Creiamo un nuovo set chiamato nomi utente con alcuni membri.
Nome utente SADD John Norek Pinku Juwana Jorgia Noton Derek Desman Julia Jumini Piter Pinso DemianChiameremo il comando sscan con l'argomento della partita per recuperare tutti i nomi utente che iniziano con "JU".
SSCAN Nome utente 0 Match Ju*Produzione
Abbiamo tre nomi utente a partire da "ju" nel set. Ma ne ha restituiti solo uno in questa iterazione. Quindi, dobbiamo chiamare di nuovo il comando sscan con il cursore aggiornato.
SSCAN Nome utente 7 Match Ju*Produzione
L'iteratore ha fatto il giro di tutti gli elementi nel set e abbiamo tre membri che corrispondono al nostro modello.
Esempio 4: limitare il numero di elementi per chiamata
Il comando Redis Sscan restituisce circa dieci elementi per chiamata per impostazione predefinita, ma è possibile specificare esplicitamente il numero di elementi da restituire per chiamata. Ciò può dare una notevole spinta delle prestazioni alla tua applicazione.
Usiamo il set precedente e limitiamo il numero di elementi restituiti per chiamata a tre. Di solito, il conteggio degli elementi restituiti fluttuerà a circa 3. Possiamo specificare il valore dell'argomento di conteggio per raggiungere questo comportamento.
nomi utente SSCan 0 Conteggio 3Produzione
Di solito, ritorna circa 10 membri, ma ora sono solo 4 elementi. Lo stesso è successo anche con le seguenti chiamate.
Nomi utente SSCAN 6 CONT 3Questo è molto utile quando hai a che fare con set di grandi dimensioni.
Conclusione
Redis include diversi tipi di raccolta, come set, hash e set ordinati. Di solito, gli iteratori possono essere utilizzati per lottare attraverso i tipi di raccolta. L'iteratore di scansione viene utilizzato per iterare le chiavi in un database Redis. È un iteratore basato sul cursore che restituisce due valori per chiamata, in cui il primo è il cursore aggiornato e il secondo è l'array di elementi. Il comando sscan ha gli stessi comportamenti del comando di scansione, ma è specifico per impostare i tipi. Può scansionare attraverso un set in base a uno schema. Inoltre, il comando è in grado di limitare il numero di elementi restituiti per chiamata.