Dettagli di basso livello dei flussi di Redis
I flussi Redis sono una struttura di dati solo per appendici che fornisce una serie di operazioni di lettura e inserzione altamente efficienti con un meccanismo di archiviazione efficiente dalla memoria. Internamente, i flussi di Redis utilizzano una struttura dati dell'albero Radix che è un albero ottimizzato nello spazio con un'elevata efficienza della memoria.
Redis Streams archivia i dati come elenco di voci in cui ogni voce è composta da coppie di valore chiave. A basso livello, queste voci sono confezionate in macro-nodi, come mostrato nel seguente.
In questo articolo, ci stiamo concentrando sulla rimozione delle voci del flusso usando il comando XTRIM e il concetto sopra menzionato influisce attentamente l'efficienza dell'operazione di rimozione. Di solito, la rimozione della voce di Redis Stream è molto efficiente se viene eseguita a livello di macro-nodo ma non a livello di entrata. Questo meccanismo è implementato con il comando XTRIM di cui discuteremo nella sezione seguente.
Il comando XTRIM
Il comando XTRIM viene utilizzato per tagliare le voci di un flusso in base a un determinato valore di soglia. La soglia può essere un numero massimo di voci per flusso o un ID di iscrizione più vecchi. Il comando XTRIM accetta il tipo di soglia come argomento di comando. La sintassi del comando XTRIM è la seguente.
XTRIM Stream_key Maxlen | Minid [= | ~] soglia_value [conteggio limite]
stream_key: La chiave del flusso Redis.
Maxlen: La lunghezza massima del ruscello dopo il taglio delle voci. Tutte le voci verranno rimosse che superano la lunghezza del flusso, che è specificata dal valore di soglia. Questo argomento è un numero intero positivo.
Minide: L'ID minimo del flusso che dovrebbe rimanere dopo aver tagliato le voci. Tutte le voci verranno rimosse che hanno ID inferiori alla soglia specificata. Ogni volta che si specifica questo parametro, la soglia diventa un ID flusso.
= operatore: Quando specificato, verrà eseguito il taglio esatto in base al valore di soglia.
~ Operatore: Quando specificato, verrà eseguito un taglio quasi esatto in base al valore di soglia e alla dimensione del macrode.
valore di soglia: Il valore di soglia basato sull'argomento Maxlen o Minid.
Conteggio dei limiti: Il numero massimo di voci da rimuovere.
Caso di utilizzo 01 - Rimozione delle voci del flusso in base alla massima lunghezza
Supponiamo che una società turistica mantenga un negozio Redis per tenere traccia delle informazioni turistiche. La struttura dei dati di Redis Streams è stata utilizzata per archiviare le informazioni di ciascun turista come coppie di valore chiave. Con il tempo, il flusso è cresciuto e stanno pianificando di mantenere solo le ultime 1000 voci. Quindi hanno identificato la lunghezza massima del flusso dovrebbe essere 1000 in qualsiasi momento. Il comando XTRIM è stato usato per raggiungere questo obiettivo.
A fini dimostrativi, in primo luogo, creeremo un flusso con 10 voci come segue. Il comando XADD è stato utilizzato per eseguire l'inserimento.
XADD Touristinfo * Nome Jack Country Italy FamilyMems 5
XADD Touristinfo * Nome Harry Country USA FamilyMems 2
XADD Touristinfo * Nome Nikomita Country Japan FamilyMems 3
XADD Touristinfo * Nome Zakaria Country India FamilyMems 2
XADD Touristinfo * Nome Redmond Country Brasile FamilyMems 6
XADD Touristinfo * Nome Nakita Country Japan FamilyMems 3
XADD Touristinfo * Nome Maryjohn Country USA FamilyMems 2
XADD Touristinfo * Nome Liza Paese Italia FamilyMems 5
XADD Touristinfo * Nome Nimshikaa Country Japan FamilyMems 3
XADD Touristinfo * Nome Nisha Paese Italia FamilyMems 5
Usiamo il comando xrange per ispezionare il flusso turistico come segue.
Xrange Touristinfo - +
Produzione:
Come previsto, le 10 voci del flusso sono state visualizzate da questo comando.
Ai fini dimostrativi, tagliamo il flusso dove la sua lunghezza massima sarebbe 5.
XTRIM Touristinfo Maxlen 5
Ispezioniamo di nuovo le voci del flusso con il comando XRange.
Come previsto, cinque voci sono state sfrattate dal flusso e la sua lunghezza è 5.
Caso di utilizzo 02 - Rimozione delle voci del flusso in base agli ID del flusso
Facciamo un esempio in cui un'azienda meteorologica tiene traccia delle informazioni meteorologiche di una determinata posizione utilizzando Redis Streams. Ora, vogliono eliminare le voci più vecchie che non sono più necessarie. Possiamo usare il comando XTRIM usando la strategia Minid, come mostrato nella seguente.
Innanzitutto, creeremo un flusso chiamato WeatherInfo e aggiungeremo 5 voci ad esso come segue.
XADD WeatherInfo * Temp 10 Umidità 50
XADD WeatherInfo * Temp 20 Umidità 70
xadd WeatherInfo * temp 12 Umidità 65
xadd WeatherInfo * temp 15 Umidità 88
XADD WeatherInfo * Temp 18 Umidità 45
Produzione:
Usiamo il comando XTRIM per rimuovere le voci che hanno ID inferiori al valore di soglia specificato.
XTRIM WeatherInfo Minid 1660485503248-0
L'ID minimo specificato è associato alla terza voce. Quindi, le voci dopo la terza voce che hanno ID più basse verranno eliminate.
Produzione:
Poiché non abbiamo specificato esplicitamente gli argomenti = o ~, il comando utilizza l'operatore di impostazione predefinita. Quindi, il taglio esatto è stato fatto in entrambi i casi d'uso. Se hai specificato esplicitamente l'operatore ~, verrà eseguito un taglio quasi esatto, come mostrato da seguito.
Come mostrato nella figura sopra, il comando XTRIM è stato utilizzato con l'operatore ~. Chiediamo al comando di rimuovere tutte le voci che superano la lunghezza di 100. Dal momento che non costringiamo il comando XTRIM a fare un taglio esatto, si concentrerà sull'efficienza dell'operazione di taglio. Quindi, non rimuoverà le voci immediate che appartengono allo stesso macro-nodo. Manterrà le prossime tre voci che si trovano nello stesso macro-nodo e rimuoverà tutti i macro-nodi dopo quelli. Fornisce un notevole miglioramento delle prestazioni rispetto all'esatto approccio di taglio, che costringe il comando a fare lo sforzo extra. La stessa procedura avviene quando la soglia si basa sugli ID di iscrizione.
L'argomento limite limita il numero di voci sfrattate dal flusso specificato, che può essere utilizzato per ottenere un po 'più di miglioramento delle prestazioni.
Conclusione
In breve, il comando XTRIM viene utilizzato per rimuovere le voci del flusso in base a un valore di soglia. Il tipo di valore di soglia può essere modificato con il contesto specificato usando gli argomenti di comando Maxlen e Minid. Come discusso, il taglio può essere fatto in due modi in cui l'operazione di taglio considererà la soglia come un limite esatto o approssimativo. Per impostazione predefinita, il comando utilizza l'operatore = viene utilizzato per il taglio esatto. Con l'operatore ~, puoi fare un taglio approssimativo come menzionato nella sezione sopra. Nel complesso, l'approccio approssimativo di taglio e l'argomento limite ti aiutano a ottenere un notevole guadagno di prestazioni con il comando XTRIM.