Redis Zcount

Redis Zcount

Redis classificou a pontuação do conjunto e a classificação

Os conjuntos classificados de Redis são a variante ordenada da estrutura de dados típica do conjunto. Cada elemento definido classificado está associado a duas propriedades especiais: classificação e pontuação. O valor da pontuação é usado para ordenar os elementos de conjunto classificados em ordem crescente. Além disso, as pontuações podem ser repetidas enquanto os membros devem ser únicos para um determinado conjunto. Como os elementos de conjunto classificados são ordenados, as operações de adição, atualização e remoção são mais rápidas. Além disso, essa estrutura de dados permite consultar os elementos em um intervalo por pontuação ou valor de classificação com ótimo desempenho.

Conforme mostrado na ilustração anterior, a maioria dos principais comandos que operam nos conjuntos de redis tem a complexidade do tempo de O (log (n)), que é mais rápido.

O comando ZCount

O comando ZCount é usado para consultar uma variedade de elementos definidos entre as pontuações especificadas. Os elementos retornados são classificados da pontuação mais baixa à mais alta. Sempre que os múltiplos elementos mantêm as mesmas pontuações, esses são ordenados por ordem lexicográfica. Este comando também possui a complexidade do tempo O (log (n)) porque usa a propriedade Rank ao consultar uma variedade de elementos. Portanto, nenhuma relação linear com o número de elementos ao medir o tempo de execução.

A seguir, a sintaxe do comando ZCount:

Sintaxe:

ZCount set_key minimum_score maximum_score

set_key: A chave do conjunto classificado Redis.

minimum_score: O menor valor de pontuação do intervalo especificado.

MAXIMUM_SCORE: O maior valor de pontuação do intervalo especificado.

As extremidades min e max do intervalo podem ser especificadas de maneiras diferentes. Sempre que você não tem idéia das pontuações mais baixas e mais altas possíveis no conjunto classificado, o -inf e +Inf podem ser usados. Idealmente, busca todos os elementos no conjunto classificado.

Além disso, os valores mínimos e máximos especificados incluem o intervalo. Se você deseja que algum desses valores seja exclusivo, o personagem “(“ pode ser usado como no ZrangeByScore comando.

Este comando retorna um valor inteiro que é o número de elementos no intervalo especificado.

Caso de uso - conte os jogadores com uma contagem de ouro entre um determinado intervalo

Redis classificado como estrutura de dados é um candidato ideal para armazenar os dados da tabela de classificação. Vamos supor um cenário em que um jogo online oferece uma quantidade de ouro para seus jogadores quando as missões são concluídas. Com base na quantidade de ouro de cada jogador, uma tabela de classificação precisa ser implementada. Podemos usar facilmente os conjuntos classificados para implementar essa tabela de classificação. A quantidade de ouro pode ser mapeada como a pontuação de cada membro.

Vamos criar um conjunto classificado Gameleaderboard e adicione alguns jogadores com quantidades de ouro, como mostrado no seguinte. O comando Zadd é usado para criar e adicionar jogadores ao conjunto classificado armazenado na chave Gameleaderboard:

Zadd gameleaderboard 1000 "Jack" 450 "Rexy" 3000 "John" 1600 "Mary" 450 "Rakesh"

Vamos usar o comando ZrangeByScore para verificar se os membros são adicionados e classificados corretamente.

ZrangeByScore gameLeaderboard -inf +INF

Como esperado, os membros são armazenados e classificados por pontuações. Como "Rexy" e "Rakesh" obtiveram as mesmas pontuações, eles são ordenados lexicograficamente com "Rakesh" sendo o principal membro da lista retornada.

Vamos contar o número de elementos no conjunto classificado usando o comando ZCount:

ZCount GameLeaderboard -inf +INF

Como recebemos cinco membros do conjunto, o valor retornado é 5 porque o intervalo é do -infinity para +infinito, que cobre todo o conjunto.

Vamos especificar um intervalo a partir de 1000 a 3000.

ZCount GameLeaderboard 1000 3000

Vamos primeiro inspecionar nosso conjunto com o comando ZrangeByScore, como mostrado no seguinte:

ZrangeByScore gameleaderboard -inf +INF com escores

Existem três membros dentro da faixa de 1000 a 3000. Como os 1000 e 3000 são inclusivos por padrão, o comando anterior ZCount deve retornar 3.

Vamos usar o “(“ Personagem para excluir as pontuações 1000 e 3000 com o mesmo exemplo mostrado no exemplo anterior:

ZCount GameLeaderboard (1000 (3000

Como as pontuações de 1000 e 3000 são excluídas, o único membro esquerdo é "Mary" com uma pontuação de 1600. Portanto, a contagem retornada é 1.

Sempre que você precisar contar os membros entre uma variedade de pontuações, é recomendável usar o comando ZCount, que é imensamente mais rápido.

Conclusão

Em resumo, o comando ZCount é usado para contar o número de elementos em uma determinada gama de valores de pontuação. Tem uma complexidade do tempo O (log (n)). Conforme discutido, pode ser usado com valores mínimos e máximos para definir uma variedade de pontuações como no comando ZrangeByScore. Os valores MIN e Max são inclusivos por padrão. Como mostrado anteriormente, o caractere “(“ pode ser usado para excluir os valores de pontuação. No geral, o comando ZCount é simples de usar e opera com ótimo desempenho.