Detalhes de baixo nível dos riachos Redis
Redis Streams são uma estrutura de dados somente de anexo que fornece um conjunto de operações de leitura e inserção altamente eficientes com um mecanismo de armazenamento com eficiência de memória. Internamente, os riachos Redis usam uma estrutura de dados da árvore da radix, que é uma árvore otimizada com o otimizado com alta eficiência de memória.
Redis Streams armazenam dados como uma lista de entradas em que cada entrada consiste em pares de valor-chave. Em um nível baixo, essas entradas são embaladas em macro-nodos, como mostrado no seguinte.
Neste artigo, estamos focando 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. Geralmente, a remoção de entrada do fluxo Redis é muito eficiente se for feito no nível de macro nós, 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 um argumento de comando. A sintaxe do comando xtrim é a seguinte.
Xtrim stream_key maxlen | Minid [= | ~] limhold_value [contagem de limites]
stream_key: A chave do riacho Redis.
Maxlen: O comprimento máximo do riacho após as entradas de corte. Todas as entradas serão removidas que excedam o comprimento do fluxo, que é especificado pelo valor limite. Este argumento é um número inteiro positivo.
Minid: O ID mínimo de fluxo que deve permanecer após aparar as entradas. Todas as entradas serão removidas com IDs inferiores ao limite especificado. Sempre que você especificar este parâmetro, o limite se torna um ID de fluxo.
= operador: Quando especificado, o corte exato será realizado com base no valor limite.
~ operador: Quando especificado, o corte quase exato será realizado com base no valor limite e no tamanho do macro nós.
valor limiar: O valor limiar com base no argumento maxlen ou minid.
Contagem de limites: O número máximo de entradas a serem removidas.
Caso de uso 01 - Remoção de entradas do 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 Redis Streams foi usada para armazenar as informações de cada turista como pares de valor-chave. Com o tempo, o fluxo cresceu e eles planejam manter apenas as mais recentes 1000 entradas. Então eles identificaram o comprimento máximo do fluxo deve ser 1000 a qualquer momento. O comando xtrim foi usado para alcançar isso.
Para fins de demonstração, primeiro, criaremos um fluxo com 10 entradas da seguinte forma. O comando xadd foi usado para executar a inserção.
Xadd Touristinfo * Nome Jack Country Itália Familymems 5
Xadd Touristinfo * Nome Harry Country USA Familymems 2
XADD TURISTINFO * NOME NIKOMITA Country Japan Familymems 3
Xadd Touristinfo * Nome Zakaria país Índia Familymems 2
Xadd Touristinfo * Nome Redmond Country Brasil Familymems 6
Xadd Touristinfo * Nome Nakita País Japan Familymems 3
Xadd Touristinfo * Nome Maryjohn Country EUA Familymems 2
Xadd Touristinfo * Nome Liza Country Itália Familymems 5
XADD TURISTINGINFO * 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 riacho turistinfo da seguinte maneira.
XRANGE TURISTINFO - +
Saída:
Como esperado, as 10 entradas de fluxo foram exibidas por este comando.
Para fins de demonstração, apararemos o riacho onde seu comprimento máximo seria 5.
XTrim Touristinfo Maxlen 5
Vamos inspecionar as entradas do fluxo novamente com o comando xRange.
Como esperado, cinco entradas foram despejadas do fluxo e seu comprimento é 5.
Use Caso 02 - Remoção de entradas de fluxo com base nos IDs de fluxo
Vamos dar um exemplo em que uma empresa meteorológica acompanha as informações climáticas de um determinado local usando fluxos Redis. Agora, eles querem excluir entradas mais antigas que não são mais necessárias. Podemos usar o comando xtrim usando a minid estratégia, conforme mostrado no seguinte.
Primeiro, estaremos criando um fluxo chamado WeatherInfo e adicionaremos 5 entradas a seguir.
Xadd Weatherinfo * Temp 10 Lengidade 50
XADD Weatherinfo * Temp 20 Horda 70
XADD Weatherinfo * Temp 12 Horda 65
Xadd Weatherinfo * Temp 15 Lunidade 88
Xadd Weatherinfo * Temp 18 Lengidade 45
Saída:
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 que estão com IDs mais baixas serão excluídas.
Saída:
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, como mostrado no seguinte.
Como mostrado na figura acima, o comando xtrim foi usado com o operador ~. Pedimos ao comando que remova todas as entradas que excedem 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 macro-nó. Ele manterá as próximas três entradas que estão no mesmo macro-nó e removerá todos os macro-nodos após aqueles. Ele fornece 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 limite 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
Em resumo, o comando xtrim é usado para remover entradas de fluxo com base em um valor limite. O tipo de valor limite pode ser alterado com o contexto que está sendo especificado usando os argumentos de comando maxlen e minid. Conforme discutido, o corte pode ser feito de duas maneiras em que a operação de corte considerará o limiar como um limite exato ou aproximado. Por padrão, o comando usa o = operador usado para corte exato. Com o operador ~, você pode fazer um corte aproximado, conforme mencionado na seção acima. No geral, a abordagem de corte aproximada e o argumento limite ajudam você a obter um ganho de desempenho considerável com o comando xtrim.