I set ordinati Redis contengono membri del tipo di stringa unici e non ripetuti in modo ordinato. Per impostazione predefinita, i membri del set ordinato sono ordinati in ordine crescente dai loro valori di punteggio. Inoltre, i set ordinati mantengono un indice basato su zero in cui i membri sono classificati come 0, 1, ... e così via. Ogni volta che i punteggi sono simili tra due o più membri, l'ordinamento verrà effettuato per ordine lessicografico. Poiché gli elementi impostati ordinati sono già ordinati, i membri possono essere interrogati per rango o punteggio in modo rapido. Inoltre, i set ordinati di Redis sono costruiti su una struttura di dati a doppia porte che consente l'esecuzione delle operazioni di aggiunta, lettura e aggiornamento e aggiornamento nella complessità del tempo O (log (n)).
In questa guida, ci concentreremo sul comando zrange, che può essere utilizzato per interrogare una serie di membri con i loro punteggi, indici o lessicograficamente.
Il comando zrange
Il comando zrange viene utilizzato per recuperare una gamma di membri di un set ordinato memorizzato in una determinata chiave. Questo comando consente di interrogare una serie di elementi basati su proprietà diverse come rango, punteggio o ordine lessicografico. Per impostazione predefinita, il comando zrange utilizza un intervallo basato sull'indice. La sintassi di base del comando zrange è la seguente.
Sintassi:
Zrange Sorted_Set_key End End [Byscore | Bylex] [rev] [conteggio di offset limite] [WithScores]
Gli argomenti di cui sopra sono obbligatori per questo comando e alcuni argomenti opzionali possono essere specificati come segue.
Come accennato, il comando zrange restituisce l'elenco dei membri in un determinato intervallo di un set ordinato memorizzato in una determinata chiave. Se viene specificato l'argomento WithScores, verrà visualizzato il punteggio associato. A partire da Redis versione 6.2.0, Zrevrange, ZrangeBycore, ZrevrangeBycore, ZrangeBylex, i comandi Zrevrangebylex possono essere sostituiti dal comando zrange.
Usa il caso 01 - Recupero dei primi 3 utenti con i punti di esperienza più bassi su una classifica di gioco
Intervallo basato sull'indice
Supponiamo che un gioco online in cui ogni utente viene premiato con punti di esperienza in base al numero di missioni completate. La struttura dei dati set ordinata da Redis è un candidato ideale per tenere queste informazioni, come mostrato nel seguente.
Zadd OnlineGameusers 3000 "Jack"
Zadd OnlineGameusers 100 "Rihana"
Zadd OnlineGameusers 1250 "Niku"
Zadd OnlineGameusers 800 "Abigirl"
Zadd OnlineGameusers 4500 "Dickson"
Come puoi vedere, i punti di esperienza di gioco sono stati archiviati come il punteggio di ciascun membro.
Ispezioniamo il set ordinato appena creato memorizzato su key "onlinegameusers". Poiché la query dell'intervallo predefinito si basa sugli indici, specificheremo i limiti minimi e massimi come 0 e 5.
zrange onlinegameusers 0 5 withscores
Come previsto, i membri sono ordinati per punteggi in ordine crescente. Interroghiamo i primi tre utenti con i punti di esperienza più bassi. Poiché il set è ordinato in ordine crescente, è veloce e banale ottenere i primi tre membri con i punti più bassi come segue.
zrange onlinegameusers 0 2 withscores
Come discusso in precedenza, i set ordinati hanno indici a base zero. Quindi, i primi tre elementi possono essere specificati come un intervallo di indice a partire da 0 a 2. L'uscita deve visualizzare i primi 3 elementi con i punteggi più bassi come segue.
Usa il caso 02 - Recupero degli utenti con oltre 3000 punti di esperienza in una classifica di gioco
In questo scenario, dobbiamo interrogare tutti gli utenti che hanno più di 1000 punti esperienza. Dal momento che stiamo parlando di un intervallo basato sul punteggio, utilizziamo l'argomento opzionale BYSCORE per specificare l'intervallo nei valori di punteggio.
zrange onlinegameusers (3000 +inf byscore withscores
I confini della gamma sono stati specificati utilizzando i punteggi. Poiché abbiamo bisogno di punteggi di oltre 3000, il punteggio di 3000 deve essere escluso. Il comando zrange supporta esclusi i punteggi prefissandolo con il personaggio '('.
Come previsto, abbiamo un solo membro il cui punto di esperienza (punteggio) è più di 3000.
Usa il caso 03: Ottenere i primi 3 utenti di cui avere i punti di esperienza più alti
Per impostazione predefinita, il set ordinato ordina i suoi elementi in ordine crescente. Quindi, il membro con il punteggio più basso è posizionato al 0 ° indice. Per ottenere i primi 3 utenti con i punteggi più alti, dobbiamo passare l'argomento Rev al comando zrange come segue. Ordinerà il set ordinato in ordine decrescente e interrogherà l'intervallo di indice a partire da 0 a 2.
zrange onlinegameusers 0 2 withscores rev
Usa il caso 04 - Recupero di utenti il cui nome inizia con "L" o seguendo lettera
Il comando zrange consente di recuperare una serie di membri basati su valori lessicografici se i punteggi sono simili tra i membri. Ripristina tutti i punteggi su 0 come segue.
Zadd OnlineGameusers 0 "Jack"
Zadd OnlineGameusers 0 "Rihana"
Zadd OnlineGameusers 0 "Niku"
Zadd OnlineGameusers 0 "Abigirl"
Zadd OnlineGameusers 0 "Dickson"
Come previsto, i punti di esperienza (punteggi) sono stati ripristinati a 0 come mostrato nel seguente.
Usiamo l'argomento bylex per recuperare i membri i cui nomi iniziano con la lettera 'l' o la seguente lettera.
zrange onlinegameusers [l + bylex
I confini della gamma sono stati specificati usando i valori stringa (lessicografico). L'output dovrebbe essere tutti i membri i cui nomi iniziano con la lettera 'l' o la seguente lettera. Idealmente, "Niku", "Rihana" e "Dickson" dovrebbero essere l'output. La lettera minuscola "D" arriva dopo la maiuscola "L" secondo i loro valori ASCII.
Conclusione
In sintesi, il comando zrange viene utilizzato per recuperare una serie di membri memorizzati in un set ordinato memorizzato in una determinata chiave. Come accennato, questo comando consente di interrogare una serie di elementi impostati per punteggi, ranghi o valori lessicografici. Inoltre, il comando zrange può essere usato con l'argomento rev per invertire l'ordine di ordinamento. Nel complesso, diverse funzionalità sono impacchettate in questo comando ed è diventata una sostituzione per diversi comandi come ZrangeBylex, ZrangeBysore, ecc.