Redis Brpoplpush

Redis Brpoplpush
Redis vem com dezenas de comandos embutidos para operar em diferentes estruturas de dados, como listas, hashes, conjuntos e etc. A maioria dos comandos executa um tipo específico de trabalho e retorna imediatamente. Além disso, um conjunto de comandos está disponível para uso com o bloqueio ativado. As operações de bloqueio mantêm a conexão com o servidor Redis até que um evento externo termine. O melhor de bloquear os comandos é que eles não bloqueiam todo o servidor Redis, em vez disso, bloqueiam apenas a conexão do cliente de chamada.

Redis tem vários comandos de bloqueio que operam na lista de estruturas de dados. O comando LPOP é usado para remover um elemento da cabeça de uma determinada lista. Ele removerá o elemento da cabeça da lista e devolveu imediatamente. O elemento removido chegará ao cliente. Sempre que nenhum elemento estiver presente na lista, o comando retornará imediatamente com um valor nulo. Sua variante de bloqueio é o comando BLPOP, que manterá a conexão com o servidor sempre que nenhum elemento estiver presente na lista. O comando BLPOP esperará até que pelo menos um elemento apareça na lista para retornar. Existem vários comandos de bloqueio disponíveis para usar com listas. Neste guia, estaremos focados no comando BRPOLPUSH.

Redis Brpoplpush Comando

O comando BrPoplpush é a variante de bloqueio do comando rpoplpush. Portanto, o comando BrPoplpush se comporta o mesmo que o comando rpoplpush quando um ou mais elementos estão disponíveis na lista de origem. Sempre que nenhum elemento está na lista, o comando BRPOPLPUSH mantém a conexão com o servidor Redis até que um elemento esteja disponível na lista de origem.

Sintaxe:

BRPOPLPUSH fonte_list Destination_list Timeout

fonte_list: A lista de que os elementos serão removidos
destino_list: A lista em que os elementos serão empurrados para
tempo esgotado: A hora de bloquear a conexão e mantê -la viva.

O comando Brpoplpush removerá um elemento da cauda do fonte_list, primeiro. Então, o elemento será empurrado perto da cabeça de outro destino_list. Sempre que a fonte estiver vazia, ele manterá a conexão como mostrado no seguinte:

Este comando tem uma complexidade de tempo constante e foi descontinuado da versão 6 Redis.2.0. Recomenda -se usar o Blmove comando com CERTO e ESQUERDA argumentos. O comando BrPoplpush retorna o elemento que está sendo retirado da fonte e empurrou para o destino. A saída será um valor nulo se o tempo limite for alcançado.

Exemplo - servidor de mensagens com filas de confiabilidade

Vamos supor que um servidor de mensagens esteja usando filas de confiabilidade para armazenar dezenas de trabalhos de fundo para um determinado aplicativo. A lista do lado do servidor foi usada para armazenar os IDs de cada trabalho de fundo. Vários clientes estão consumindo a lista buscando trabalhos de fundo da cauda.

A maior desvantagem desse processo é: se houver uma rede ou falha no aplicativo do cliente, a peça retornada será perdida antes do processamento no lado do cliente. Portanto, é necessária uma fila confiável separada para armazenar o elemento pop da lista de origem enquanto a devolve ao cliente. Além disso, a lista de origem pode estar vazia quando não há trabalhos de fundo produzidos pelos editores. Portanto, precisamos de uma maneira de a conexão do cliente ser mantida e viva até que um trabalho de fundo esteja disponível na lista de origem. O comando BrPoplpush é o candidato ideal para conseguir isso.

Vamos fazer uma chamada para o servidor Redis com o comando BRPOPLPUSH, como mostrado no seguinte. As chaves de origem e de destino não existem.

BRPOPLPUSH BackgroundJobs_list RelientQueue_list 0

Especificamos o argumento do tempo limite para 0, o que significa que a operação de BrPoplpush será bloqueada para sempre até que você o encerre manualmente. Agora, ele está esperando que pelo menos um único trabalho de fundo esteja disponível na lista armazenada na chave BackgroundJobs_list.

Em seguida, estaremos empurrando um trabalho de fundo para o BackgroundJobs_list Lista como mostrado no seguinte. Vamos usar o comando lpush para empurrar um único trabalho de fundo com o ID de “B1”.

Como esperado, o elemento "B1" foi devolvido ao cliente que manteve a conexão até que um elemento esteja disponível na lista de origem BackgroundJobs_list. Vamos inspecionar a fila de destino confiableQueue_list. Aqui, estamos usando o LRange comando como mostrado no seguinte:

LRANGE RELESLIBLEQUEE_LIST 0 10

A fila de destino contém o elemento "B1" que é retirado da lista de origem. Este comando garante que os elementos sejam armazenados em outra fila sem perdê -los quando um cliente trava. O comando BrPoplpush pode ser usado como uma lista circular quando a fonte e o destino são os mesmos.

Conclusão

Para resumir, o Redis possui dezenas de comandos internos operando em diferentes tipos de dados. A maioria dos comandos é não bloqueando onde o comando será devolvido imediatamente após o término do trabalho. Conforme discutido, vários comandos de bloqueio embutidos estão disponíveis para operar nos tipos de lista. O comando Brpoplpush é um deles. Como você já sabe, é a variante de bloqueio do comando rpoplpush. Ele se comporta o mesmo que o comando rpoplpush quando pelo menos um único elemento é armazenado na lista de origem. Sempre que a lista de origem não existe, o comando BrPoplPush aguarda um tempo limite especificado até que um elemento esteja presente na lista de origem. Como afirmado, como tem complexidade constante de tempo, muito eficiente de usar com filas confiáveis ​​nos servidores de mensagens.