Redis Zset

Redis Zset

“Você quer implementar uma tabela de classificação em tempo real para o seu próximo jogo online com Redis? Redis fornece uma solução pronta para uso ZSets, que é um nome curto para conjuntos classificados para redis e é uma ferramenta com a qual todo usuário Redis deve estar familiarizado.

Redis Zset é uma coleção ordenada de membros únicos, onde cada membro está associado a um valor de pontuação. Para destacar, os ZSets são ordenados pelo seu valor de pontuação por padrão, o que os torna bem diferentes do tipo de conjunto regular. Além disso, mais de um membro pode manter o mesmo valor de pontuação, e os membros serão ordenados lexicograficamente nesse caso. Os ZSets Redis são uma escolha melhor para filas prioritárias, indexação secundária, placares de baixa latência e limitadores de taxa. Como os ZSets fornecem demandas em tempo real, como capacidade de resposta e acesso na memória com baixa latência.

Além disso, cada membro recebe um valor de classificação com base em sua posição no zset que é mais como um índice baseado em 0 em uma matriz Java.”

Uma rápida olhada nos comandos básicos do zset

Vários comandos básicos estão disponíveis para adicionar, buscar e remover membros de um zset (conjunto classificado) armazenado em uma determinada tecla ZSet. Vamos dar uma rápida olhada em três comandos principais: Zadd, Zrange, Zrank e Zrem.

Um tempo real Pokémon Exemplo de tabela de classificação de jogo será demonstrado aqui.

Comando zadd

Após o registro do usuário, precisamos adicionar cada usuário ao nosso zset nomeado Pokémon: Robôlea de Lábio. Portanto, o comando Zadd é o candidato ideal para usar da seguinte maneira. Suponha que temos cinco jogadores registrados inicialmente. Então, as pontuações serão atribuídas a 0.

Zadd Pokemon: tabela de classificação 0 John

O valor de retorno é 1, o que significa que um membro foi adicionado ao zset armazenado em Key Pokemon: Lizer Robone. Se o membro já estiver disponível no zset fornecido, apenas o valor da pontuação será atualizado.

Estamos todos bons em prosseguir. Então, vamos em frente e adicionar os quatro jogadores restantes ao Zset: Pokemon: Robôlego.

Zadd Pokemon: tabela de classificação 0 Anna
Zadd Pokemon: tabela de classificação 0 Zakariah
Zadd Pokemon: tabela de classificação 0 Bob
Zadd Pokemon: tabela de classificação 0 Mary

Comando zRange

Todos os cinco membros foram adicionados com sucesso. Em seguida, devemos examinar ou consultar os membros adicionados usando o comando Zrange. O comando Zrange permite a recuperação de membros que são classificados em um determinado intervalo. Um intervalo pode ser especificado por valores de classificação, pontuação ou lexicographics.

Vamos consultar todos os membros especificando o intervalo por valores de classificação.

ZRANGE POKEMON: RABOLA DE LIGADOR 0 -1

Como esperado, todos os cinco membros foram devolvidos e ordenados lexicograficamente porque os valores de pontuação são os mesmos para todos os membros neste momento. Além disso, 0 é o índice de partida/classificação do intervalo e -1 denota o índice superior do zset fornecido.

O comando Zrange oferece uma ampla gama de argumentos opcionais, e usaremos o argumento do Withscores com o comando acima para exibir as pontuações associadas para cada membro.

ZRANGE Pokemon: Rabo de classificação 0 -1 Withscores

Comando Zincby

Suponha que os jogadores estejam jogando o jogo há algumas horas e as pontuações aumentaram de 0. O Redis ZSets fornece o comando Zincrby para incrementar as pontuações de cada membro da seguinte maneira.

Zincrby Pokemon: tabela de classificação 100 Bob

Isso deve aumentar o valor do membro Bob de 0 a 100. Vamos chamar o mesmo comando para incrementar as pontuações de outros jogadores também.

Zincrby Pokemon: tabela de classificação 200 Anna
Zincrby Pokemon: tabela de classificação 76 Zakariah
Zincrby Pokemon: tabela de classificação 450 Mary
Zincrby Pokemon: tabela de classificação 167 John

De acordo com os valores de retorno, as pontuações deveriam ter sido atualizadas corretamente. Vamos usar o comando Zrange uma vez para recuperar os membros novamente com suas pontuações.

Bravo! As pontuações dos jogadores foram atualizadas adequadamente. Além disso, os membros são ordenados por suas pontuações em ordem ascendente, que é uma característica legal do Redis ZSets.

Comando zrevrank

É uma obrigação exibir a classificação de cada jogador em uma tabela de classificação. Portanto, o comando de Zrevrank é usado para mostrar o posto de membros onde o elemento associado à maior pontuação será o 0º lugar, e o próximo mais alto será o 1º ranking, e assim por diante.

Desde membro Mary tem a pontuação mais alta, esse elemento deve ser classificado como o principal membro com 0ª classificação. Vamos usar o comando zrevrank da seguinte maneira.

Zrevrank Pokemon: líder Mary

Como esperado, a classificação é 0, o que significa o melhor jogador na tabela de classificação do jogo.

Vamos usar o comando zrevrank com o elemento Zakariah como segue. Idealmente, deve ser a última classificação, pois esse membro tem o menor valor de pontuação.

Comando zrem

Sempre que precisamos remover um elemento ou vários elementos de um zset, o comando ZREM é útil. Vamos remover Zakariah da tabela de classificação devido à sua pontuação baixa.

Zrem Pokemon: tabela de classificação Zakariah

Foi removido corretamente do zset.

Mais importante ainda, os comandos do zset têm complexidade do tempo O (log (n)), onde n é o número de elementos no conjunto classificado, que é consideravelmente mais rápido. Ao mesmo tempo, o comando Zrange deve ser usado com cuidado porque possui O (log (n) + l), onde l é o número de resultados retornados pelo comando. Portanto, pode causar problemas de desempenho ao trabalhar com conjuntos de dados maiores.

Conclusão

Em resumo, o Redis Zset é um nome curto para um tipo de dados de conjunto classificado que pode conter membros exclusivos ordenados por seus valores de pontuação. Conforme discutido, os membros do ZSET são strings não repetidos e os valores de pontuação podem ser repetidos. Quando vários membros são atribuídos com o mesmo valor de pontuação, esses membros serão ordenados lexicograficamente. Os ZSets são uma ótima opção para tabelas de classificação em tempo real, indexação secundária e filas de prioridade com maior capacidade de resposta e baixa latência no acesso à memória. Para concluir, vários comandos estão disponíveis para adicionar, remover e consultar membros de um determinado Redis Zset com facilidade.