Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Redis SortedSet:Como obter valores em ordem numérica em vez de ordem alfabética quando dois valores têm a mesma pontuação?


Quando os membros de um conjunto ordenado têm a mesma pontuação, eles são ordenados lexicograficamente. Não há uma maneira direta de fazer com que eles sejam pedidos de maneira diferente AFAIK, mas você pode facilmente fazer a classificação do lado do cliente. Alternativamente, você pode preparar um pequeno script Lua que faça isso para você no servidor.

Existe uma maneira um pouco hackeada de você conseguir o que deseja sem recorrer às abordagens acima. Com base no exemplo que você forneceu e assumindo que a classificação e o ID do usuário são números inteiros, você pode usar pontuações que sejam uma combinação de ambos, assim:
zadd game_rank 550006435 6435
zadd game_rank 556088561 6088561
zadd game_rank 550608825 608825

Isso permitirá que você faça intervalos e você terá uma classificação "numérica" ​​para cada classificação (ou seja, com zrangebyscore game_rank 550000000 559999999 ).