Redis XTRIM

Redis Xtrim



Detalhes de baixo nível de fluxos do Redis

Os fluxos do Redis são uma estrutura de dados somente anexada que fornece um conjunto de operações de leitura e inserção altamente eficientes com um mecanismo de armazenamento com uso eficiente de memória. Internamente, os fluxos Redis usam uma estrutura de dados de árvore Radix, que é uma árvore otimizada para espaço com alta eficiência de memória.

Os fluxos do Redis armazenam dados como uma lista de entradas em que cada entrada consiste em pares de chave-valor. Em um nível baixo, essas entradas são compactadas em macro-nós, conforme mostrado a seguir.









Neste artigo, estamos nos concentrando na remoção de entradas de fluxo usando o comando XTRIM, e o conceito mencionado acima afeta de perto a eficiência da operação de remoção. Normalmente, a remoção de entrada de stream do Redis é muito eficiente se for feita no nível do macro-nó, mas não no nível de entrada. Esse mecanismo é implementado com o comando XTRIM que discutiremos na seção a seguir.



O comando XTRIM

O comando XTRIM é usado para cortar as entradas de um fluxo com base em um determinado valor limite. O limite pode ser um número máximo de entradas por fluxo ou um ID de entrada mais antigo. O comando XTRIM aceita o tipo de limite como argumento de comando. A sintaxe do comando XTRIM é a seguinte.





XTRIM stream_key MAXLEN | MINID [ = | ~ ] valor limiar [ LIMIT contagem ]

stream_key : a chave do fluxo Redis.

MAXLEN : o comprimento máximo do fluxo após o corte de entradas. Todas as entradas serão removidas que excederem o comprimento do fluxo, que é especificado pelo valor limite. Este argumento é um número inteiro positivo.

MINID : o id de stream mínimo que deve permanecer após o corte das entradas. Todas as entradas que tiverem IDs inferiores ao limite especificado serão removidas. Sempre que você especifica esse parâmetro, o limite se torna um ID de fluxo.

= operador : Quando especificado, o corte exato será executado com base no valor limite.

~ operador : Quando especificado, o corte quase exato será executado com base no valor do limite e no tamanho do macro-nó.

valor limiar : O valor limite com base no argumento MAXLEN ou MINID.

LIMIT contagem : O número máximo de entradas a serem removidas.

Caso de uso 01 - Remoção de entradas de fluxo com base no comprimento máximo

Vamos supor que uma empresa de turismo mantenha uma loja Redis para acompanhar as informações turísticas. A estrutura de dados de fluxos do Redis foi usada para armazenar as informações de cada turista como pares de valores-chave. Com o tempo, o fluxo cresceu e eles planejam manter apenas as últimas 1.000 entradas. Portanto, eles identificaram que o comprimento máximo do fluxo deve ser 1000 a qualquer momento. O comando XTRIM foi usado para conseguir isso.

Para fins de demonstração, primeiro, criaremos um fluxo com 10 entradas da seguinte forma. O comando XADD foi usado para realizar a inserção.

xadd Touristinfo * nome jack country itália familymems 5
xadd Touristinfo * nome harry country eua familymems dois
xadd Touristinfo * nome nikomita country japan familymems 3
xadd Touristinfo * nome zakaria país índia familymems dois
xadd Touristinfo * nome redmond country brasil familymems 6
xadd Touristinfo * nome encontrado país japão familymems 3
xadd Touristinfo * nome maryjohn país eua familymems dois
xadd Touristinfo * nome liza country itália familymems 5
xadd Touristinfo * nome nimshikaa país japão familymems 3
xadd Touristinfo * nome nisha country itália familymems 5

Vamos usar o comando XRANGE para inspecionar o stream touristinfo da seguinte forma.

xrange informações turísticas - +

Resultado:

Conforme esperado, as 10 entradas de fluxo foram exibidas por este comando.

Para fins de demonstração, estaremos cortando o fluxo onde seu comprimento máximo seria 5.

xtrim informações turísticas maxlen 5

Vamos inspecionar as entradas de fluxo novamente com o comando XRANGE.

Como esperado, cinco entradas foram despejadas do fluxo e seu comprimento é 5.

Caso de uso 02 – Remoção de entradas de stream com base em IDs de stream

Vejamos um exemplo em que uma empresa meteorológica acompanha as informações meteorológicas de um determinado local usando fluxos do Redis. Agora, eles querem excluir entradas mais antigas que não são mais necessárias. Podemos usar o comando XTRIM usando a estratégia MINID, conforme mostrado a seguir.

Primeiro, criaremos um fluxo chamado weatherinfo e adicionaremos 5 entradas a ele da seguinte maneira.

xadd weatherinfo * temperatura 10 umidade cinquenta
xadd weatherinfo * temperatura vinte umidade 70
xadd weatherinfo * temperatura 12 umidade 65
xadd weatherinfo * temperatura quinze umidade 88
xadd weatherinfo * temperatura 18 umidade Quatro cinco

Resultado:

Vamos usar o comando XTRIM para remover as entradas que possuem IDs inferiores ao valor limite especificado.

xtrim weatherinfo MINID 1660485503248 - 0

O id mínimo especificado está associado à terceira entrada. Portanto, as entradas após a terceira entrada com IDs inferiores serão excluídas.

Resultado:

Como não especificamos os argumentos = ou ~ explicitamente, o comando usa o operador = por padrão. Portanto, o corte exato foi feito em ambos os casos de uso. Se você especificou o operador ~ explicitamente, o corte quase exato será feito, conforme mostrado a seguir.

Conforme mostrado na figura acima, o comando XTRIM foi usado com o operador ~. Pedimos ao comando para remover todas as entradas que excedam o comprimento de 100. Como não forçamos o comando XTRIM a fazer um corte exato, ele se concentrará na eficiência da operação de corte. Portanto, não removerá as entradas imediatas que pertencem ao mesmo nó de macro. Ele manterá as próximas três entradas que estão no mesmo nó de macro e removerá todos os nós de macro depois deles. Dá uma quantidade considerável de melhoria de desempenho do que na abordagem de corte exata, o que força o comando a fazer um esforço extra. O mesmo procedimento ocorre quando o limite é baseado nos IDs de entrada.

O argumento LIMIT limita o número de entradas despejadas do fluxo especificado, que pode ser usado para obter um pouco mais de melhoria de desempenho.

Conclusão

Resumindo, o comando XTRIM é usado para remover entradas de fluxo com base em um valor limite. O tipo do valor limite pode ser alterado com o contexto que está sendo especificado usando os argumentos dos comandos MAXLEN e MINID. Conforme discutido, o trimming pode ser feito de duas maneiras, onde a operação de trimming considerará o limite como um limite exato ou aproximado. Por padrão, o comando usa o operador = que é usado para o corte exato. Com o operador ~, você pode fazer um corte aproximado conforme mencionado na seção acima. No geral, a abordagem de corte aproximado e o argumento LIMIT ajudam você a obter um ganho de desempenho considerável com o comando XTRIM.