Maison > base de données > Redis > Comment utiliser les ensembles triés Redis pour les classements et les requêtes de plage?

Comment utiliser les ensembles triés Redis pour les classements et les requêtes de plage?

Robert Michael Kim
Libérer: 2025-03-11 18:21:31
original
517 Les gens l'ont consulté

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

Comment utiliser les ensembles triés Redis pour les classements et les requêtes de plage?

Comment utiliser des ensembles triés Redis pour les classements et les requêtes de plage

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é.

  • Ajouter des joueurs: ZADD leaderboard 100 player1 200 player2 50 player3 Cela ajoute trois joueurs au classement avec des scores 100, 200 et 50 respectivement.
  • Récupération des 5 meilleurs joueurs: 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).
  • Récupération des joueurs avec des scores comprises entre 100 et 200: ZRANGEBYSCORE leaderboard 100 200 WITHSCORES cela renvoie tous les joueurs avec des scores dans la plage spécifiée.

Avantages de performance de l'utilisation des ensembles triés Redis pour les classements

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:

  • Par rapport aux listes: les listes nécessitent une itération de toute la liste pour trouver un rang ou une gamme de scores spécifique, ce qui entraîne une complexité O (n) pour les opérations de récupération, où n est le nombre de joueurs. Les ensembles triés, en revanche, utilisent une structure de données de liste de sauts permettant une complexité O (log n) pour la plupart des opérations, ce qui les rend beaucoup plus rapidement pour les grands classements.
  • Par rapport aux tables de hachage: bien que les tables de hachage puissent stocker efficacement les scores, ils n'ont pas la fonctionnalité intégrée pour les requêtes de portée et le tri. La mise en œuvre de la fonctionnalité de classement à l'aide de tables de hachage nécessiterait des algorithmes de tri complexes dans votre code d'application, conduisant à une latence plus élevée et à une complexité accrue.
  • Par rapport aux bases de données relationnelles: les bases de données relationnelles sont généralement plus lentes pour les mises à jour et les requêtes de classement en temps réel par rapport à Redis. Les frais généraux des transactions de base de données, de l'indexation et de la communication réseau ont un impact significatif sur les performances. Redis, étant un magasin de données en mémoire, fournit des opérations de lecture et d'écriture extrêmement rapides.

Mise à jour efficace des scores et des rangs dans un classement de réglage trié redis

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:

  • Données de données: distribuez le classement sur plusieurs instances Redis pour gérer un nombre massif de joueurs.
  • À l'aide d'une structure de données distincte pour les données moins fréquemment accessibles: par exemple, stockez des informations détaillées sur les joueurs dans une base de données distincte et conservez uniquement le score dans l'ensemble trié Redis.

Implémentation de pagination et de filtrage sur un classement de réglage trié redis

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal