Os dados no fluxo são imutáveis. Os novos dados só podem ser anexados no final do fluxo. Redis Streams podem conter entradas que não são apenas strings. Cada entrada pode conter um ou vários pares de valor de campo, como em Redis Hashes. Essas entradas têm um ID exclusivo para identificá -las dentro do fluxo, semelhante aos números de linha ou compensações de bytes usadas em um arquivo de log. A ilustração a seguir fornecerá uma melhor compreensão de como é o Redis Stream:
O comando xadd é usado para adicionar entradas a um determinado fluxo que é direto. O mecanismo de acesso a dados é diferente com tipos de fluxo em comparação com outros tipos. O principal benefício dos fluxos é que eles podem empurrar as mensagens recém -anexadas a vários clientes ou consumidores. É apenas uma maneira de olhar para riachos redis. Além disso, podemos vê-lo como uma loja de séries temporais, onde você pode iterar durante todo o fluxo para buscar todas as entradas para um determinado período de tempo.
Redis Stream Grupos de Consumidores
Como mencionado, os fluxos Redis permitem que vários consumidores leiam dados dele. Além disso, estende essa funcionalidade a um nível de acesso a um subconjunto das mensagens de fluxo por diferentes consumidores. Cada consumidor captura dados diferentes para processar, enquanto Kafka implementa o mesmo comportamento com grupos de consumidores. A técnica de grupos de consumo está disponível em fluxos Redis que permitem distribuir os dados de fluxo fornecidos entre vários consumidores.
Podemos usar o comando xReadGroup para ler dados por meio de um grupo de consumidores. Cada grupo de consumidores pode conter vários consumidores identificados por um nome único.
O comando xack
Como mencionado anteriormente, os consumidores de um grupo de consumidores recebem mensagens do fluxo onde os IDs da mensagem são maiores que o último ID entregue. Ao entregar uma mensagem a um consumidor, seu status será definido como pendente e armazenado na lista de entradas pendentes de um grupo de consumidores (PEL). É um efeito colateral de chamar os comandos XReadGroup ou Xclaim. Isso ainda faria com que o servidor retorne as mensagens pendentes sempre que fazer uma chamada usando o comando xReadGroup para buscar o histórico de mensagens por consumidor. Portanto, os grupos de consumidores Redis introduziram um processo de reconhecimento de mensagem. O comando xack pode notificar o servidor que uma mensagem buscada foi processada com sucesso. Removeria a entrada para essa mensagem no PEL.
Sintaxe
XackO comando Xack retorna o número de entradas reconhecidas como uma resposta.
Exemplo: o Balancero de carga atende a diferentes clientes de vários nós do servidor
Vejamos um cenário do mundo real, onde um balanceador de carga lê a partir de um fluxo de endereços IP do cliente e serve a cada cliente de diferentes nós do servidor. Podemos pensar nisso como um grupo de consumidores lendo de um riacho Redis, onde o grupo contém vários nós do consumidor.
Primeiro, devemos criar um grupo de consumidores para o qual cada nó do servidor pertence. Podemos usar o seguinte comando xgroup para criar um grupo de consumidores para um determinado fluxo:
XGROUP Crie ipaddressstream ukservergroup $ mkStreamO comando é auto-explicativo, onde o ipaddressstream tem um novo grupo de consumidores chamado ukServergroup Isso fornece apenas as mensagens mais recentes disponíveis para o fluxo quando um consumidor está conectado. Também cria o ipaddressstream transmissão porque o MkStream O parâmetro foi especificado.
Então, devemos adicionar vários endereços IP ao ipaddressstream Criado anteriormente usando o seguinte comando redis xadd:
Xadd ipaddressstream * ip 123.456.12.1Saída após cada comando:
Isso adicionaria 5 entradas ao ipaddressstream fluxo. Cada entrada é atribuída a um ID exclusivo gerado pelo servidor que retornou depois de ligar para o comando xadd.
Agora, vamos ler o ipaddressstream através do UkServerGroup's consumidor chamado Server0.
XReadGroup Group ukservergroup server0 contagem 2 streams ipaddressstream>Saída
Como esperado, o Server0 consumidor recebe duas novas mensagens do ipaddressstream fluxo. Esses dois endereços IP foram adicionados à lista de entradas pendentes. Se ligarmos para o comando xReadGroup com o 0 ID, ele retornará as mensagens pendentes para o Server0 consumidor.
XReadGroup Group ukservergroup server0 streams ipaddressstream 0Saída
Isso significa que o servidor ainda está esperando pelo Server0 consumidor para reconhecer essas duas mensagens. Vamos reconhecer as mensagens para o Server0 consumidor usando o seguinte comando xack.
Xack ipaddressstream ukservergroup 1656192378464-0 1656192389344-0Aqui, estamos reconhecendo as duas entradas identificadas pelos respectivos IDs. O comando retorna a contagem das mensagens processadas com sucesso também. São dois neste caso.
Saída
Após o processo anterior, essas duas mensagens deveriam ter sido removidas da lista de entradas pendentes (PEL). Portanto, o Server0 O consumidor não retornará nenhuma mensagem pendente ao ligar para o comando XReadGroup através do grupo de consumidores ukServergroup.
XReadGroup Group ukservergroup server0 streams ipaddressstream 0Saída
Ele retorna uma matriz vazia, o que significa que não há mensagens pendentes para este consumidor. O recurso de reconhecimento de mensagem é muito útil nesses tipos de cenários.
Conclusão
Redis vem com o tipo de dados de fluxo cuja implementação subjacente é baseada na estrutura de dados do log. Portanto, as novas entradas são anexadas no final do fluxo. A maior vantagem é que vários consumidores podem consultar as mensagens mais recentes adicionadas ao fluxo. Além disso, a técnica do Redis Consumer Group permite o fluxo de leitura por um grupo de consumidores onde cada consumidor vê apenas um subconjunto das mensagens do fluxo. Ao ler a entrada de um consumidor do fluxo, essa entrada é adicionada à lista de entradas pendentes. Portanto, o consumidor precisa reconhecer cada uma das mensagens pendentes. Ele notificará o servidor para remover a entrada do PEL e liberar a memória. O comando Xack pode ser usado para reconhecer mensagens de fluxo Redis. Ele suporta reconhecer várias mensagens de uma só vez.