Se você deseja criar um ranking para sua aplicação, é muito provável que precisará saber:
- o total de registros;
- a posição de um elemento específico;
- os primeiros colocados;
- os ultimos colocados;
Além disso, você vai querer inserir e retirar elementos de forma transparente e rápida.
Para isso, recomendo que use o Redis e seus sorted sets! Funciona de maneira bem simples e pode ser implementado em várias linguagens que possuam o cliente do Redis Acredito que seja muito mais rápido e eficiente do que armazenar em uma base convencional, fazer consultas ordenadas por score e salvar posição.
Exemplos
Todos os comandos a seguir estão muito bem(!) documentados no site do redis
Adicionando membros ao ranking
Comando: ZADD
Cria o ranking(sorted set), se não existir, e adiciona “membro_um” com 100 pontos de score:
1
|
|
Adiciona “membro_dois” com 422.1 de score e “membro_tres” o 142 de score:
1 2 |
|
“Selecionando” membros do ranking por range
Você pode selecionar membros de determinado ranking passando um range:
1
|
|
O comando acima vai devolver 11 elementos, ordenados de forma crescente. Para ordenar de forma decrescente, utilize o ZREVRANGE.
Obtendo a posição de um elemento
Algumas vezes é preciso saber a posição de um elemento relativo a todo o ranking. Isso se torna um pouco complicado quando se faz utilizando SQL e bancos convencionais. No Redis é muito simples:
1
|
|
Para pegar a posição relativa ao ranking ordenado de forma decrescente, utilize o ZREVRANK:
1
|
|
Total de membros no ranking
Comando: ZCARD
O total de membros de um determinado ranking pode ser obtido com:
1
|
|
Conclusão
O Redis foi muito útil em uma historia onde era preciso otimizar a performance de páginas de rankings no Kademi. Especialmente porque usávamos vários rankings na mesma página e fazíamos grandes consultas para saber a posição atual de um membro relativo ao ranking. Utilizamos Ruby e o cliente redis-rb, e foi bem legal ver os resultados(a página em questão carrega em média 10x mais rápido agora)!
Há vários outros comandos disponíveis para Sorted set e outras estruturas de dados. Para saber mais sobre o Redis e testar os comandos em questão, acesse o site do projeto e siga o @antires, seu criador.