Cet article démontre l'utilisation d'ensembles triés Redis pour une implémentation efficace de classement. Il met en évidence les avantages de performance par rapport aux listes, aux tables de hachage et aux bases de données relationnelles, mettant l'accent sur la complexité O (log n) pour les opérations clés. S
Les ensembles triés Redis sont idéaux pour mettre en œuvre des classements car ils stockent intrinsèquement les membres (joueurs, utilisateurs, etc.) avec des scores associés (leur classement de classement). La commande ZADD
vous permet d'ajouter ou de mettre à jour les membres et leurs scores efficacement. Les requêtes de plage sont ensuite effectuées à l'aide de commandes comme ZRANGE
, ZREVRANGE
, ZRANGEBYSCORE
et ZREVRANGEBYSCORE
.
Par exemple, disons que nous construisons un classement pour un jeu. Nous pouvons représenter les joueurs utilisant leurs ID en tant que membres et leurs scores comme scores de l'ensemble trié.
ZADD leaderboard 100 player1 200 player2 50 player3
Cela ajoute trois joueurs au classement avec des scores 100, 200 et 50 respectivement.ZREVRANGE leaderboard 0 4 WITHSCORES
Cela récupère les 5 meilleurs joueurs (avec des scores) dans l'ordre descendant (score le plus élevé en premier).ZRANGEBYSCORE leaderboard 100 200 WITHSCORES
cela renvoie tous les joueurs avec des scores dans la plage spécifiée.Les ensembles triés Redis offrent des avantages de performance significatifs par rapport aux autres structures de données pour les classements en raison de leur structure interne optimisée. Voici une comparaison:
La mise à jour des scores et des classements dans un ensemble trié Redis est très efficace grâce à la commande ZADD
. ZADD
met à jour atomiquement le score d'un membre. Si le membre n'existe pas, il ajoute le membre avec le score donné; S'il existe, il met à jour son score. Cela garantit la cohérence des données même sous une concurrence élevée.
Par exemple, pour mettre à jour le score de Player1 à 150: ZADD leaderboard 150 player1
Pour les scénarios où vous devez incrémenter ou décrémenter les scores, la commande ZINCRBY
est plus efficace: ZINCRBY leaderboard 50 player1
Cela augmente le score de Player1 de 50.
Pour maintenir efficacement un grand classement, considérez des stratégies comme:
Les ensembles triés Redis fournissent un excellent support pour la pagination et le filtrage. La pagination est facilement réalisée à l'aide des commandes ZRANGE
et ZREVRANGE
avec clause LIMIT
:
ZREVRANGE leaderboard 0 9 WITHSCORES
récupère les 10 meilleurs joueurs.
ZREVRANGE leaderboard 10 19 WITHSCORES
récupère les joueurs classés 11-20.
Le filtrage peut être effectué à l'aide ZRANGEBYSCORE
et le combiner avec LIMIT
de pagination:
ZRANGEBYSCORE leaderboard 100 200 WITHSCORES LIMIT 0 10
récupère les 10 meilleurs joueurs avec des scores entre 100 et 200.
Pour les critères de filtrage plus complexes (par exemple, le filtrage par plusieurs attributs), vous devrez peut-être pré-comparer ou maintenir des ensembles triés séparés en fonction de différents critères de filtrage ou utiliser une combinaison de structures de données redis et de logique côté application. Par exemple, vous pouvez utiliser des ensembles triés séparés pour différents modes de jeu ou régions.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!