Redis XTRIM

Redis Xtrim



Dettagli di basso livello dei flussi Redis

I flussi Redis sono una struttura di dati di sola aggiunta che fornisce una serie di operazioni di lettura e inserimento altamente efficienti con un meccanismo di archiviazione efficiente in termini di memoria. Internamente, i flussi Redis utilizzano una struttura di dati ad albero Radix che è un albero ottimizzato per lo spazio con un'elevata efficienza della memoria.

I flussi Redis archiviano i dati come un elenco di voci in cui ciascuna voce è costituita da coppie chiave-valore. A un livello basso, queste voci sono raggruppate in macro-nodi, come mostrato di seguito.









In questo articolo, ci stiamo concentrando sulla rimozione delle voci di flusso utilizzando il comando XTRIM e il concetto sopra menzionato influisce da vicino sull'efficienza dell'operazione di rimozione. Di solito, la rimozione della voce del flusso Redis è molto efficiente se viene eseguita a livello di nodo macro ma non a livello di ingresso. Questo meccanismo è implementato con il comando XTRIM di cui parleremo 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 voce precedente. Il comando XTRIM accetta il tipo di soglia come argomento del comando. La sintassi del comando XTRIM è la seguente.





XTRIM stream_key MAXLEN | MINID [ = | ~ ] valore di soglia [ Conteggio LIMITE ]

stream_key : La chiave del flusso Redis.

MAXLEN : la lunghezza massima del flusso dopo il taglio delle voci. Verranno rimosse tutte le voci che superano la lunghezza del flusso, specificata dal valore di soglia. Questo argomento è un numero intero positivo.

MINID : l'ID flusso minimo che dovrebbe rimanere dopo aver tagliato le voci. Verranno rimosse tutte le voci con ID inferiori alla soglia specificata. Ogni volta che si specifica questo parametro, la soglia diventa un ID flusso.

= operatore : Quando specificato, il taglio esatto verrà eseguito 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 macronodo.

valore di soglia : il valore di soglia basato sull'argomento MAXLEN o MINID.

Conteggio LIMITE : Il numero massimo di voci da rimuovere.

Caso d'uso 01 – Rimozione delle voci di flusso in base alla lunghezza massima

Supponiamo che un'azienda turistica mantenga un negozio Redis per tenere traccia delle informazioni turistiche. La struttura dei dati dei flussi Redis è stata utilizzata per memorizzare le informazioni di ciascun turista come coppie chiave-valore. Con il tempo, il flusso è cresciuto e stanno pianificando di conservare solo le ultime 1000 voci. Quindi hanno identificato che la lunghezza massima del flusso dovrebbe essere 1000 in qualsiasi momento. Il comando XTRIM è stato utilizzato per ottenere ciò.

A scopo dimostrativo, per prima cosa creeremo uno stream con 10 voci come segue. Il comando XADD è stato utilizzato per eseguire l'inserimento.

xaggiungere informazioni turistiche * nome jack paese italia familymems 5
xaggiungere informazioni turistiche * nome harry country usa familymems Due
xaggiungere informazioni turistiche * nome nikomita paese giappone familymems 3
xaggiungere informazioni turistiche * nome zakaria paese india familymems Due
xaggiungere informazioni turistiche * nome redmond paese brasile familymems 6
xaggiungere informazioni turistiche * nome trovato paese giappone familymems 3
xaggiungere informazioni turistiche * nome maryjohn paese usa familymems Due
xaggiungere informazioni turistiche * nome liza paese italia familymems 5
xaggiungere informazioni turistiche * nome nimshikaa paese giappone familymems 3
xaggiungere informazioni turistiche * nome nisha paese italia familymems 5

Usiamo il comando XRANGE per ispezionare lo stream touristinfo come segue.

xrange touristinfo - +

Produzione:

Come previsto, le 10 voci di flusso sono state visualizzate da questo comando.

A scopo dimostrativo, taglieremo il flusso dove la sua lunghezza massima sarebbe 5.

xtrim touristinfo maxlen 5

Esaminiamo nuovamente le voci del flusso con il comando XRANGE.

Come previsto, cinque voci sono state sfrattate dal flusso e la sua lunghezza è 5.

Caso d'uso 02: rimozione delle voci di flusso in base agli ID flusso

Facciamo un esempio in cui un'azienda meteorologica tiene traccia delle informazioni meteorologiche di una determinata località utilizzando i flussi Redis. Ora vogliono eliminare le voci più vecchie che non sono più necessarie. Possiamo usare il comando XTRIM usando la strategia MINID, come mostrato di seguito.

Innanzitutto, creeremo uno stream chiamato weatherinfo e aggiungeremo 5 voci come segue.

xaggiungere informazioni meteo * temp 10 umidità cinquanta
xaggiungere informazioni meteo * temp venti umidità 70
xaggiungere informazioni meteo * temp 12 umidità 65
xaggiungere informazioni meteo * temp quindici umidità 88
xaggiungere informazioni meteo * temp 18 umidità Quattro cinque

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. Pertanto, le voci dopo la terza voce che hanno ID inferiori verranno eliminate.

Produzione:

Poiché non abbiamo specificato esplicitamente gli argomenti = o ~, il comando utilizza l'operatore = per impostazione predefinita. Pertanto, il taglio esatto è stato eseguito in entrambi i casi d'uso. Se hai specificato l'operatore ~ ​​in modo esplicito, verrà eseguito il taglio quasi esatto, come mostrato di 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. Poiché non forziamo il comando XTRIM a eseguire 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 tre voci successive che si trovano nello stesso macro-nodo e rimuoverà tutti i macro-nodi dopo quelli. Offre un notevole miglioramento delle prestazioni rispetto all'approccio di rifinitura esatto, il che costringe il comando a impegnarsi in uno sforzo extra. La stessa procedura avviene quando la soglia è basata sugli ID di ingresso.

L'argomento LIMIT limita il numero di voci eliminate dal flusso specificato, che può essere utilizzato per ottenere un miglioramento delle prestazioni leggermente maggiore.

Conclusione

In breve, il comando XTRIM viene utilizzato per rimuovere le voci di flusso in base a un valore di soglia. Il tipo del valore di soglia può essere modificato con il contesto che viene specificato utilizzando gli argomenti del comando MAXLEN e MINID. Come discusso, il taglio può essere eseguito 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 = utilizzato per il taglio esatto. Con l'operatore ~, puoi eseguire un taglio approssimativo come menzionato nella sezione precedente. Nel complesso, l'approccio di taglio approssimativo e l'argomento LIMIT consentono di ottenere un notevole aumento delle prestazioni con il comando XTRIM.