Redis BRPOP

Redis BRPOP
A lista é um tipo de dados Redis popular que armazena uma sequência de strings com base na ordem de inserção. Uma lista pode conter mais de 4 bilhões de elementos. O fato único sobre a lista Redis é que ela mantém as propriedades da cabeça e da cauda, ​​onde os elementos podem ser inseridos de ambos os lados. Geralmente, o Lpush e Rpush Os comandos são usados ​​para inserir os elementos em uma lista. Enquanto isso, a nova lista é criada com a chave especificada. Todos os comandos da lista se comportam da mesma maneira em que uma nova lista é criada quando passada com uma chave inexistente.


Além disso, quando todos os elementos forem exibidos da lista, a chave associada será excluída do espaço da chave Redis. Lista de Redis é o candidato ideal para as aplicações de baixa latência, porque as operações de inserção e exclusão têm complexidade de tempo constante no CABEÇA e CAUDA. Não importa se cinco ou mil elementos estão na lista. O tempo para a inserção e exclusão leva um tempo constante perto das extremidades esquerda e direita.

Existem algumas necessidades práticas para remover os elementos da cauda ou cabeça de uma determinada lista. O BRPOP e BLPOP Os comandos são introduzidos na versão 2 Redis.0.0 para atender ao requisito mencionado. O BRPOP O comando é avaliado neste guia.

O comando BRPOP

O BRPOP é a versão avançada do Rpop comando. O Rpop O comando coloca um elemento da cauda da lista que é armazenada em uma determinada chave. Como o nome sugere, o comando BRPOP é a versão de bloqueio do RPOP. Quando a chave não existe, o comando BRPOP não retornará com o nada valor imediatamente como no comando rpop. Em vez disso, espera até que uma nova lista seja criada nessa chave. Após a criação de uma nova lista na chave mencionada, o comando BRPOP aparece o elemento da cauda. Além disso, este comando aceita as múltiplas teclas e só coloca os elementos da primeira chave não vazia.

Sintaxe:

A seguir, a sintaxe do comando BRPOP:

BRPOP list_key [list_key…] Timeout


list_key: Esta é a chave da lista.
tempo esgotado: Este é o valor do tempo limite em segundos em que o cliente está bloqueado até que esse tempo limite chegue.

Geralmente, o comando BRPOP retorna uma saída de matriz:

Se uma lista não vazia for especificada, o comando retornará o valor do elemento pop e a chave da lista que contém, como no formato a seguir:

1) "Carlist"
2) "Benz"

Quando nenhum elemento único deve ser expulso de nenhuma das listas especificadas e o tempo limite expirou, o nada o valor é retornado.

(nada)
(10.46s)

Exemplo: Manipulação da lista de reprodução da estação de rádio com BRPOP

Vamos supor que uma estação de rádio precisa tocar músicas de uma lista de reprodução diária. A lista de reprodução contém os IDs da música para tocar. As músicas devem ser ordenadas na ordem de inserção. Cada música é escolhida no final da lista de reprodução para tocar.

Podemos usar a estrutura de dados da lista Redis para implementar a lista de reprodução mencionada e as operações da lista para manipular as músicas da lista de reprodução. Vamos criar uma lista de reprodução chamada MidnightplayList e adicione alguns IDs de música, como mostrado no seguinte. O Lpush O comando é usado para isso:

LPUSH MidnightplayList Song001 Song004 Song010 Song100 Song101


Isso criaria uma lista como mostrado no seguinte:

Cabeça -> Song101 | Song100 | Song010 | Song004 | Song001 <- tail


Comportamento não bloqueador do comando BRPOP

Agora é a hora de começar um show. Devemos escolher algumas músicas do final da lista de reprodução. Por isso, Song001 deve ser removido da lista de reprodução e deve ser tocado pelo gravador. Usamos o comando BRPOP para aparecer o Song001 Da lista de reprodução e para obter o ID da música para o ouvinte cliente.

BRPOP MidnightplayList 5


O argumento do tempo limite é especificado como cinco segundos. Desde o MidnightplayList contém elementos, o BRPOP O comando se comporta de uma maneira não bloqueadora. Portanto, ele aparece e retorna o elemento da cauda ao cliente.

Comportamento de bloqueio do comando BRPOP

Os resultados anteriores também podem ser alcançados através do comando rpop. Portanto, vamos analisar a verdadeira vantagem do comando BRPOP com o comportamento de bloqueio. Vamos remover todos os elementos do MidnightplayList chave usando o comando rpop.

RPOP MidnightplayList 4


Isso remove todos os elementos restantes da lista e do MidnightplayList A chave é excluída do espaço da chave Redis também.

Vamos executar o comando BRPOP com 60 segundos de tempo limite e a chave inexistente MidnightplayList. Agora, o comando se comporta de maneira bloqueadora. Espera que a chave seja criada e o elemento esteja presente na lista de reprodução MidnightplayList.


Vamos empurrar um elemento para o MidnightplayList através de outra janela do terminal que está conectada ao mesmo armazenamento de dados Redis.

LPUSH Midnightplaylist Song400


Após a criação do MidnightplayList Lista com o elemento Song400, A janela do cliente que executou o comando BRPOP aparece o elemento Song400 Da lista de reprodução e retorna o ID da música como saída instantaneamente.


Escolha uma música de várias listas de reprodução

Pode haver várias listas de reprodução criadas pela estação de rádio. Por isso, devemos escolher uma música das listas de reprodução dadas em um determinado momento. Vamos supor que temos três listas de reprodução: MidnightPlayList1, MidnightplayList2, e MidnightPlayList3. O MidnightPlayList1 já está vazio enquanto as outras duas listas de reprodução não estão vazias.

LPUSH MidnightplayList2 Song1002 Song1005
LPUSH MidnightplayList3 Song3000


Vamos chamar o comando BRPOP com todas as três chaves, como mostrado no seguinte:

BRPOP MidnightplayList1 MidnightPlayList2 MidnightPlayList3 10


Desde a primeira chave MidnightPlayList1 está vazio, é ignorado pelo comando aqui. Ele verifica a primeira chave não vazia da lista de chaves disponíveis. Portanto, o comando localiza o MidnightplayList2 como a primeira chave não vazia da ordem das chaves. Como esperado, o Song1002 é removido do MidnightplayList2.


O comando BRPOP tem complexidade de tempo constante perto da cabeça e da cauda quando uma única chave é especificada. A complexidade do tempo se torna O (n) quando várias chaves são especificadas no comando. Além disso, esse comando é muito eficiente de usar nas aplicações de baixa latência, como uma fila, pilha, linha do tempo nas mídias sociais, etc.

Conclusão

Para resumir, uma lista Redis é uma coleção de elementos de string armazenados em uma determinada chave enquanto classificados na ordem de inserção. Vários comandos estão disponíveis para operar nas listas Redis com complexidade de tempo constante perto da cabeça e da cauda. Como afirmado, o comando BRPOP é usado para remover os elementos do lado direito da lista Redis armazenada em uma determinada chave com o suporte de bloqueio. O comando BRPOP bloqueia a conexão do cliente quando nenhum elemento está disponível para remover das listas especificadas. Como você sabe, este comando aceita várias teclas em que um elemento é exibido da primeira lista não vazia, onde cada tecla é verificada na ordem em que são passadas para o comando.