Não há uma maneira direta de excluir entradas mais antigas com base no TTL/idade. Você pode usar uma combinação de
XTRIM/XDEL
com outros comandos para cortar o fluxo. Vamos ver como podemos usar
XTRIM
XTRIM stream MAXLEN ~ SIZE
O XTRIM corta o fluxo para um determinado número de itens, despejando itens mais antigos (itens com IDs mais baixos) se necessário.
Você gera o tamanho do fluxo todos os dias ou periodicamente com base em sua política de exclusão e o armazena em algum lugar usando
XLEN
comando Execute um trabalho periódico que chamaria XTRIM como
XTRIM x-stream MAXLEN ~ (NEW_SIZE - PREVIOUS_SIZE)
Por exemplo, o tamanho do stream de ontem era 500, agora é 600, então precisamos deletar 500 entradas para que possamos executar
XTRIM x-stream MAXLEN ~ 100
Você pode usar políticas diferentes para exclusão, por exemplo, diariamente, semanalmente, duas vezes por semana etc.
ID do fluxo XDEL [ID...]
Remove as entradas especificadas de um fluxo e retorna o número de entradas excluídas, que pode ser diferente do número de IDs passados ao comando caso determinados IDs não existam.
Portanto, o que você pode fazer é sempre que o Serviço B consumir o evento, o próprio serviço poderá excluir a entrada do fluxo, pois o serviço B conhece o ID do fluxo, mas isso não funcionará assim que você começar a usar o grupo de consumidores. Portanto, eu diria que use o conjunto Redis ou o mapa Redis para rastrear os IDs de fluxo de reconhecimento e executar um trabalho de varredura periódico para limpar o fluxo.
Por exemplo
O serviço A envia um item de fluxo com ID1 para o serviço B O serviço B reconhece o item de fluxo depois de consumir os itens no mapack_stream ={ ID1:true }, você pode rastrear outros dados, por exemplo. contar no caso do grupo de consumidores.
Um trabalho de varredura seria executado periodicamente, como 01:00, diariamente, que lê todos os elementos de ack_stream e filtra todos os itens que exigem exclusão. Agora você pode chamar
XDEL
comandos em lote com o conjunto de IDs de stream.