Comando Redis sscan

Comando Redis sscan
Redis é uma loja de valor-chave que vem com vários tipos de dados embutidos. Ele também inclui tipos de coleção, como conjuntos, hashes e conjuntos classificados. Sempre que você tem tipos de coleta, é necessário ter um método para percorrer os elementos de uma coleção. Geralmente, em um contexto de programação, usamos iteradores para esse fim.

Redis suporta iteradores baseados em cursor. Esses iteradores podem atravessar de forma incremental a coleção e retornar um número limitado de elementos. Ao mesmo tempo, ele retorna o índice/id de cursor atualizado como um número inteiro para usar na próxima iteração. Um cursor é um ponteiro mantido pelo iterador para manter o novo local após cada iteração.

O iterador de varredura

O comando de varredura é a base para muitos outros iteradores Redis. Este iterador não garante o número de elementos retornados em cada loop. Pode retornar 0 elementos ou todos os elementos em uma determinada iteração. Além disso, poderia produzir o mesmo elemento várias vezes porque a coleção pode mudar, o que é uma desvantagem no iterador de varredura. O comando de varredura retorna dois valores em cada execução. O primeiro valor é um ID de referência ao cursor, e o segundo valor é uma coleção de elementos. Sempre começa no cursor 0. Vários outros iteradores são derivados do iterador de varredura, como sscan, hscan e zcan. Esses comandos têm o mesmo comportamento, mas operam em diferentes tipos de coleções.

A iteração total

Como o comando de varredura não garante o número de elementos retornados em cada iteração, a única maneira de notificar que o iterador foi realizado por toda a coleção é verificar o ID de referência do cursor devolvido ou o índice em cada execução. Se o cursor retornado for 0, indica que todos os elementos foram iterados. É chamado de iteração completa.

O comando sscan

O iterador do sscan é derivado do iterador de varredura. Portanto, todos os comportamentos são estendidos do comando de varredura, mas apenas itera os tipos de conjunto.

Sintaxe

Sscan set_key cursor [padrão de correspondência] [contagem de contagem]

set_key: Esta é a chave do conjunto.

cursor: ID de referência do seguinte cursor, que é devolvido após cada chamada.

A correspondência e a contagem são dois parâmetros opcionais que podem ser usados ​​para filtrar os elementos retornados com base em um determinado padrão e limitar o número de elementos retornados.

Este comando retornaria o próximo cursor e uma variedade de elementos. O ID do cursor devolvido pode ser passado para o comando sscan na próxima chamada.

Exemplo 1: itera sobre um pequeno conjunto

Vamos criar um conjunto Redis usando o comando sadd.

Sadd setOfcolors Vermelho verde preto branco azul rosa cinza laranja roxo amarelo

O comando anterior criará um novo conjunto SETOFCOLORS e adicione 10 membros de maneira não ordenada. Podemos usar o comando smembers para verificar a operação anterior.

SMEMBERS SPOTOFCOLORS

Como esperado, o conjunto SETOFCOLORS foi criado com sucesso.

Podemos usar o comando sscan para iterar sobre o SETOFCOLORS Defina como mostrado no seguinte:

SSCAN SEPOFCOLORS 0

Como mencionado, o comando deve começar com o cursor 0. A chave do conjunto também foi passada. Desde o SETOFCOLORS Contém apenas 10 membros, o comando sscan pode retornar todos os elementos na primeira iteração. Porque o SETOFCOLORS é um conjunto comparativamente pequeno.

Saída

Conforme discutido, o comando retornou dois valores como o primeiro é 0. Isso significa que acima é uma iteração completa. Não há necessidade de ligar para o sscan novamente. Todos os dez membros foram devolvidos como o segundo valor de retorno deste comando.

Exemplo 2: iterar em um grande conjunto

Estaremos criando um conjunto com mais de 20 membros.

Sadd Alphabet A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Vamos iterar sobre o alfabeto definir.

Alfabeto do sscan 0

Como sempre, começamos com o cursor 0. Além disso, a chave do conjunto foi passada como o alfabeto. Ele retornou apenas 11 membros da primeira iteração, como mostrado no seguinte:

O próximo cursor é 6. Vamos chamar o comando sscan novamente com os argumentos relevantes.

Agora, ele retornou outros 10 membros e o próximo cursor como 13. Temos que ligar para o comando sscan novamente para terminar a iteração completa.

O valor do cursor devolvido é 0, o que significa que o iterador iterou por todo o conjunto.

Exemplo 3: Combinação de padrões com o sscan

Podemos usar o parâmetro de correspondência para filtrar os membros retornados com base em um padrão especificado. Vamos criar um novo conjunto chamado nomes de usuário com alguns membros.

Nomes de usuário sadd John Norek Pinku Juwana Jorgia Noton Derek Desman Julia Jumini Piter Pinso Demian

Vamos chamar o comando sscan com o argumento da partida para buscar todos os nomes de usuário começando com "ju".

Nomes de usuário do sscan 0 corresponde a Ju*

Saída

Temos três nomes de usuário começando de "Ju" no set. Mas ele retornou apenas um nesta iteração. Portanto, precisamos ligar para o comando sscan novamente com o cursor atualizado.

Nomes de usuário do sscan 7 combinam ju*

Saída

O iterador se enquadrou em todos os elementos do conjunto, e temos três membros que correspondem ao nosso padrão.

Exemplo 4: limite o número de elementos por chamada

O comando Redis SSCAN retorna em torno de dez elementos por chamada por padrão, mas você pode especificar explicitamente o número de elementos a serem retornados por chamada. Isso pode dar um aumento considerável de desempenho ao seu aplicativo.

Vamos usar o conjunto anterior e limitar o número de elementos retornados por chamada para três. Geralmente, a contagem de elementos retornados flutuará em torno de 3. Podemos especificar o valor do argumento da contagem para alcançar esse comportamento.

Nomes de usuário do sscan 0 contagem 3

Saída

Geralmente, ele retorna cerca de 10 membros, mas agora são apenas 4 elementos. O mesmo aconteceu com as seguintes ligações também.

Nomes de usuário do sscan 6 contagem 3
Nomes de usuário do sscan 1 contagem 3
Nomes de usuário do sscan 7 contagem 3

Isso é muito útil quando você está lidando com grandes conjuntos.

Conclusão

Redis inclui vários tipos de coleta, como conjuntos, hashes e conjuntos classificados. Geralmente, os iteradores podem ser usados ​​para percorrer os tipos de coleta. O iterador de varredura é usado para iterar as teclas em um banco de dados Redis. É um iterador baseado em cursor que retorna dois valores por chamada, onde o primeiro é o cursor atualizado e o segundo é a matriz de elementos. O comando sscan tem os mesmos comportamentos que o comando de varredura, mas é específico definir tipos. Ele pode escanear através de um conjunto com base em um padrão também. Além disso, o comando é capaz de limitar o número de elementos retornados por chamada.