Introdução a conjuntos classificados para redis

Introdução a conjuntos classificados para redis
Conjuntos classificados Redis são uma versão mais avançada de conjuntos. Um conjunto classificado herda todas as propriedades da estrutura de dados Redis Set. Além disso, eles mantêm a ordem dos elementos mantidos. Cada membro de um conjunto classificado tem uma pontuação usada para ordenar os elementos definidos em ordem crescente.

Os conjuntos classificados são muito rápidos ao adicionar, atualizar e remover seus membros. Tem complexidade do tempo logarítmico em todas essas operações. Como os membros são ordenados, o acesso ao elemento do meio também é muito eficiente. Portanto, o conjunto classificado seria ideal para implementar aplicativos em tempo real, como tabelas de classificação de jogos on-line, filas prioritárias de baixa latência e índices secundários.

O comando zadd

Vários comandos estão disponíveis para operar em conjuntos classificados. O Zadd O comando é usado para adicionar um ou vários membros com pontuações a um conjunto classificado armazenado em uma determinada chave. A complexidade do tempo deste comando é proporcional ao logaritmo do número de elementos. Portanto, é muito mais rápido do que a maioria dos outros comandos de Redis.

Sempre que adicionamos membros usando o comando Zadd, existem alguns efeitos diretos que ocorrem no conjunto classificado.

Como um conjunto classificado possui um conjunto único de membros, ele não permite adicionar membros já especificados no conjunto classificado. Em vez disso, ele atualizará a pontuação desse membro em particular e colocará esse elemento no índice certo para manter a ordem correta.

Se a tecla de conjunto classificada não existir, o comando Zadd criará o conjunto classificado e adicionará todos os membros especificados.

Se a chave existir, mas não deve segurar um valor de tipo de conjunto classificado, ele levantará um erro.

Sintaxe

Zadd [Nx | Xx] [GT | LT] [CH] [incur] [Membro da pontuação…]

Geralmente, o comando Zadd retorna o número de membros adicionados ao conjunto classificado. Portanto, ignora as atualizações de pontuação para os membros já existentes. Este valor de retorno mudará se o CH a opção é especificada. Portanto, a contagem de todos os membros alterados será devolvida pelo comando de Zadd. Esta contagem inclui a soma de recém -adicionada e a pontuação mudou de membros.

Exemplo 01 - Tabela de classificação de jogos online

Vamos assumir um cenário em que precisamos gerenciar uma tabela de classificação de usuário para um jogo de aventura on -line que é jogado por milhares de usuários em todo o mundo. A natureza do jogo é que cada usuário ganha ouro por conclusão bem -sucedida de cada missão. Conjunto classificado Redis seria a estrutura de dados ideal que podemos usar para esse tipo de aplicação de baixa latência em tempo real.

Estaremos criando um conjunto classificado identificado pela chave gameleaderboard. Além disso, vários jogadores serão adicionados à medida que os membros do set classificados com pontuações diferentes. O valor do ouro ganho de cada usuário será mapeado como a pontuação do conjunto classificado.

Adicionando vários membros com Zadd

Zadd gameleaderboard 2300 jogador: 1 1400 jogador: 2 800 jogador: 3 3500 jogador: 4 4000 jogador: 5

Saída:

Como esperado, o valor de retorno é 5. É o número de membros adicionados ao conjunto classificado armazenado na chave gameleaderboard.

Vamos verificar se o conjunto classificado contém todos os membros de maneira ordenada. Podemos usar o comando Zrange para consultar todos os membros com suas pontuações, como mostrado no seguinte:

ZRANGE GameLeaderboard 0 10 Withscores

Como mencionado, o gameleaderboard Conjunto classificado armazena seus membros em ordem crescente com base em suas pontuações.

Adicionando um novo membro com a mesma pontuação que o membro existente

Vamos tentar adicionar outro usuário Jogador: 6 com a quantidade de ouro de 3500. Redis classificados conjuntos permitem a inserção de membros com o mesmo valor de pontuação. Portanto, esta operação deve adicionar com sucesso o Jogador: 6.

Zadd gameleaderboard 3500 jogador: 6

Saída:

Como esperado, o valor de retorno é 1 que verifica o membro foi adicionado com sucesso.

Vamos inspecionar os membros do set classificado usando o comando Zrange novamente.

O membro Jogador: 6 foi inserido logo após o Jogador: 4. Redis classificados conjuntos usam a ordem lexicográfica se os valores da pontuação forem iguais para os membros especificados. Compara as seqüências de membros como uma variedade de bytes e os ordena de acordo.

Uso de opções NX e XX com Zadd

Vamos supor que precisamos apenas atualizar a pontuação de um membro existente e não adicionar novos membros ao conjunto classificado gameleaderboard. O Xx a opção é usada para conseguir isso.

Zadd gameleaderboard xx 3500 jogador: 7 3000 jogador: 5

Como esperado, o valor de retorno é 0, o que significa que nenhum novo membro foi adicionado. Estaremos inspecionando o conjunto classificado novamente.

O Jogador: 7 membro não foi adicionado ao conjunto classificado, mas o Jogador: 5 A pontuação do membro foi modificada e é colocada de acordo.

O Nx a opção faz exatamente o oposto do Xx.

Zadd gameleaderboard nx 5500 jogador: 7 4000 jogador: 5

Vamos inspecionar o conjunto classificado novamente.

Como afirmado acima, o novo membro Jogador: 7 foi adicionado com sucesso. O Jogador: 5 O valor da pontuação não foi modificado.

Uso das opções de LT e GT com Zadd

As opções de LT e GT são muito úteis quando você precisa atualizar valores de pontuação condicionalmente. Qualquer uma dessas duas bandeiras não impedirá a adição de novos elementos ao conjunto classificado.

Sempre que você especificar a opção LT com o comando Zadd, ele modificará o valor da pontuação se e somente se a nova pontuação for menor que a pontuação atual desse elemento. A opção GT modificará a pontuação apenas se a nova pontuação for maior que a pontuação atual.

Zadd gameleaderboard LT 2100 jogador: 1 1500 jogador: 2

Vamos inspecionar o gameleaderboard Conjunto classificado.

Como você pode ver, o jogador: 1 A pontuação anterior do membro foi 2300. Portanto, a pontuação foi alterada com esta operação e foi alterada para 2100. O Jogador: 2-A pontuação do membro não foi alterada, pois sua pontuação anterior foi menor que a nova pontuação.

A opção ch

Geralmente, o comando Zadd retorna o número de membros adicionados. Com a opção CH, ele retornará a soma de recém -adicionados e os membros existentes cujas pontuações são modificadas.

Zadd gameleaderboard ch 2100 jogador: 8 1500 jogador: 2 3550 jogador: 4

Após a execução do comando acima, o jogador: 8 membro tem que ser adicionado. O Jogador: 2 e Jogador: 4 Os valores de pontuação dos membros devem ser modificados. Portanto, a soma de membros recém -adicionados e modificados é 3.

Uso de Opção incr em Zadd

O Incr a opção aumentará a pontuação de um membro pelo número de incremento especificado. O comando zadd se comporta exatamente como zincby.

Vamos incrementar o Jogador: 7 Pontuação do membro por outros 100, como mostrado no seguinte

Zadd gameleaderboard incur 100 jogador: 7

Como esperado, o valor da pontuação anterior foi incrementado por 100. A nova pontuação é retornada como 5600.

Conclusão

O conjunto de dados classificado Redis é uma estrutura de dados mais avançada que herda todas as propriedades de conjuntos comuns. Os conjuntos classificados são muito mais rápidos do que a maioria dos comandos Redis. Portanto, os conjuntos classificados são amplamente utilizados em aplicações de baixa latência em tempo real. O comando Zadd é usado para criar um conjunto classificado em uma chave especificada com vários membros. Os membros são ordenados com base em seus valores de pontuação. Sempre que os valores de pontuação são os mesmos para vários membros, a ordem será feita usando a ordem lexicográfica.