sql >> Base de Datos >  >> NoSQL >> Redis

¿Cómo definir TTL para transmisiones redis?

No existe una forma sencilla de eliminar entradas anteriores en función del TTL/edad. Puede usar una combinación de XTRIM/XDEL con otros comandos para recortar la transmisión.

Veamos cómo podemos usar XTRIM

Corriente XTRIM MAXLEN ~ TAMAÑO

XTRIM recorta el flujo a un número determinado de elementos, expulsando los elementos más antiguos (elementos con ID más bajos) si es necesario.

Generas el tamaño de transmisión todos los días o periódicamente según tu política de eliminación y lo almacenas en algún lugar usando XLEN comando

Ejecute un trabajo periódico que llame a XTRIM como

XTRIM x-stream MAXLEN ~ (NEW_SIZE - PREVIOUS_SIZE)

Por ejemplo, ayer el tamaño de la transmisión era 500, ahora es 600, entonces necesitamos eliminar 500 entradas para que podamos ejecutar

XTRIM x-stream MAXLEN ~ 100

Puede usar diferentes políticas para la eliminación, por ejemplo, diariamente, semanalmente, dos veces por semana, etc.

ID de transmisión XDEL [ID...]

Elimina las entradas especificadas de una secuencia y devuelve el número de entradas eliminadas, que puede ser diferente del número de ID pasados ​​al comando en caso de que no existan ciertos ID.

Entonces, lo que puede hacer es que cada vez que el Servicio B consuma el evento, el propio servicio puede eliminar la entrada de flujo ya que el servicio B conoce el ID de flujo, pero esto no funcionará tan pronto como comience a usar el grupo de consumidores. Por lo tanto, recomendaría usar el conjunto de Redis o el mapa de Redis para realizar un seguimiento de los ID de flujo de reconocimiento y ejecutar un trabajo de barrido periódico para limpiar el flujo.

Por ejemplo

El servicio A envía un elemento de flujo con ID1 al servicio B. El servicio B reconoce el elemento de flujo después de consumir los elementos en mapack_stream ={ID1:true}, puede rastrear otros datos, p. cuenta en el caso del grupo de consumidores.

Un trabajo de barrido se ejecutaría periódicamente como a la 1 a. m. todos los días que lee todos los elementos de ack_stream y filtra todos los elementos que requieren eliminación. Ahora puedes llamar a XDEL comandos en lote con el conjunto de ID de flujo.