Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Como definir o TTL para fluxos redis?


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.