Redis
 sql >> Database >  >> NoSQL >> Redis

Come definire il TTL per i flussi redis?

Non esiste un modo semplice per eliminare le voci più vecchie in base al TTL/età. Puoi utilizzare una combinazione di XTRIM/XDEL con altri comandi per tagliare lo stream.

Vediamo come possiamo usare XTRIM

Stream XTRIM MAXLEN ~ TAGLIA

XTRIM riduce lo stream a un determinato numero di elementi, eliminando gli elementi più vecchi (oggetti con ID inferiori), se necessario.

Generi la dimensione del flusso ogni giorno o periodicamente in base alla tua politica di eliminazione e la memorizzi da qualche parte utilizzando XLEN comando

Esegui un lavoro periodico che chiamerebbe XTRIM come

XTRIM x-stream MAXLEN ~ (NEW_SIZE - PREVIOUS_SIZE)

Ad esempio, ieri la dimensione dello stream era 500 ora è 600, quindi dobbiamo eliminare 500 voci in modo da poterlo eseguire

XTRIM x-stream MAXLEN ~ 100

Puoi utilizzare criteri diversi per l'eliminazione, ad esempio giornaliera, settimanale, due volte a settimana, ecc.

ID flusso XDEL [ID...]

Rimuove le voci specificate da uno stream e restituisce il numero di voci eliminate, che potrebbe essere diverso dal numero di ID passati al comando nel caso in cui determinati ID non esistano.

Quindi quello che puoi fare è ogni volta che il servizio B consuma l'evento, il servizio stesso può eliminare la voce del flusso poiché il servizio B conosce l'ID flusso, ma ciò non funzionerà non appena inizi a utilizzare il gruppo di consumatori. Quindi direi di utilizzare il set Redis o la mappa Redis per tenere traccia degli ID flusso di riconoscimento ed eseguire un processo di scansione periodico per ripulire il flusso.

Ad esempio

Il servizio A invia un elemento del flusso con ID1 al servizio B Il servizio B riconosce l'elemento del flusso dopo aver consumato gli elementi nel mapack_stream ={ ID1:true }, puoi tenere traccia di altri dati, ad es. contare nel caso del gruppo di consumatori.

Un processo di scansione verrebbe eseguito periodicamente come l'una di notte ogni giorno che legge tutti gli elementi di ack_stream e filtra tutti gli elementi che richiedono l'eliminazione. Ora puoi chiamare XDEL comandi in batch con il set di ID flusso.