Redis est un système de base de données clé-valeur open source hautes performances. Il est largement utilisé dans les systèmes de classement en temps réel en raison de sa vitesse de lecture et d'écriture rapide, de la prise en charge de plusieurs types de données, de ses structures de données riches et d'autres caractéristiques. Le système de classement en temps réel fait référence à un système qui trie les données selon certaines conditions, comme le classement par points dans les jeux, le classement des ventes dans le commerce électronique, etc.
Cet article présentera les technologies clés utilisées par Redis pour créer un système de classement en temps réel, ainsi que des exemples de code spécifiques. Le contenu comprend les parties suivantes :
Redis prend en charge plusieurs types de données, notamment les chaînes, les tables de hachage, les listes, ensembles et ensembles ordonnés.
L'ensemble ordonné est le type de données clé pour implémenter la liste de classement. Il peut facilement trier les données en fonction de la valeur d'un certain champ. Chaque élément de l'ensemble trié a un score et est trié en fonction du score. Lorsque les partitions sont identiques, triez-les par ordre lexicographique. Chaque élément d'un ensemble ordonné possède une valeur de membre unique qui identifie l'élément de manière unique.
Les commandes spécifiques liées aux ensembles ordonnés incluent : ZADD, ZREM, ZRANGE, etc.
Le système de classement en temps réel nécessite un tri rapide et précis, un algorithme de tri approprié doit donc être sélectionné. Redis utilise l'algorithme de liste de saut pour implémenter des collections ordonnées.
La liste de sauts est une structure de données aléatoires, similaire à une liste chaînée, mais chaque nœud possède plusieurs pointeurs, ce qui rend la recherche plus efficace. Les nœuds de la table de sauts sont disposés par ordre croissant, et chaque nœud a un « numéro de niveau » aléatoire et chaque niveau a un pointeur vers le nœud du niveau suivant. Ce « nombre de couches » est généré aléatoirement et peut être ajusté selon les besoins.
La complexité temporelle de la table de sauts est O(log n) et la complexité spatiale est O(n), ce qui peut bien répondre aux besoins d'un système de classement en temps réel.
L'utilisation de Redis pour implémenter le classement nécessite les étapes suivantes :
1) Créer un ensemble ordonné
Utilisez la commande ZADD pour créer un ensemble ordonné et ajouter des éléments (membres et fraction). Chaque membre possède un identifiant unique. Par exemple, un identifiant d'utilisateur peut être utilisé dans un jeu ou un numéro d'article peut être utilisé dans le commerce électronique.
2) Obtenir les données de classement
Acquérir les éléments de l'ensemble ordonné en fonction du classement Utilisez la commande ZRANGE pour effectuer des requêtes d'intervalle sur l'ensemble ordonné. Par exemple, pour obtenir les 10 principales informations utilisateur, vous pouvez utiliser la commande ZRANGE 0 9 WITHSCORES.
3) Mettre à jour le score
Lorsque le score de l'utilisateur change, le score correspondant dans l'ensemble commandé doit être mis à jour. Les mises à jour peuvent être effectuées à l'aide de la commande ZADD.
4) Obtenez le classement
Obtenez le classement dans le classement en fonction de l'ID utilisateur. Vous pouvez utiliser la commande ZRANK pour obtenir le classement correspondant à l'ID utilisateur.
Ce qui suit est un exemple de code pour une implémentation de liste de classement basée sur Redis, qui utilise l'algorithme de saut de table :
import redis # 连接 Redis 数据库 r = redis.StrictRedis(host='localhost', port=6379, db=0) # 创建排行榜 def create_leaderboard(): r.zadd('leaderboard', {'Tom': 100, 'Jerry': 90, 'Peter': 80, 'Lucy': 70}) # 获取排行榜前 N 名的数据 def get_topN(n): data = r.zrevrange('leaderboard', 0, n - 1, withscores=True) return data # 更新用户积分 def update_score(username, score): r.zadd('leaderboard', {username: score}) # 获取指定用户在排行榜中的排名 def get_rank(username): rank = r.zrank('leaderboard', username) return rank # 测试代码 if __name__ == '__main__': create_leaderboard() print(get_topN(3)) # 输出前 3 名的数据 update_score('Tom', 95) # Tom 的积分变为 95 print(get_topN(3)) # 再次输出前 3 名的数据,应该会有变化 print(get_rank('Tom')) # Tom 目前的排名是第 2 名
À mesure que la quantité de données dans le système de classement en temps réel devient de plus en plus grande, vous peut rencontrer un goulot d'étranglement dans les performances du système. Afin de garantir l'évolutivité du système, le cluster Redis peut être utilisé pour étendre horizontalement le système de classement en temps réel.
Le cluster Redis fait référence à une instance Redis exécutée de manière distribuée sur plusieurs serveurs. Il stocke une grande quantité de données sur différents nœuds pour obtenir une haute disponibilité et un équilibrage de charge des données. Le cluster Redis peut être implémenté à l'aide de Redis Cluster ou Redis Sentinel.
Vous devez prêter attention aux points suivants lors de la mise en œuvre d'un cluster Redis :
1) Partitionnement des données : le stockage dispersé des données sur différents nœuds peut réduire efficacement la pression de charge sur un seul nœud.
2) Séparation de lecture et d'écriture : utilisez l'architecture maître-esclave pour obtenir une séparation de lecture et d'écriture, ce qui peut allouer des opérations de lecture à plusieurs nœuds et améliorer l'efficacité de lecture du système.
3) Mécanisme de tolérance aux pannes : utilisez Redis Sentinel ou d'autres mécanismes de tolérance aux pannes pour obtenir un basculement automatique afin de garantir la haute disponibilité du système.
Résumé :
Redis est un outil puissant pour mettre en œuvre des systèmes de classement en temps réel. Il prend en charge plusieurs types de données et des structures de données riches, et peut mettre en œuvre efficacement le tri et les requêtes de données. Un tri efficace peut être obtenu à l'aide de l'algorithme de saut de table, et couplé à l'expansion horizontale du cluster Redis, le système de classement en temps réel peut gérer de grandes quantités de données et garantir une haute disponibilité du système. Les exemples de code fournis dans cet article peuvent être utilisés comme composants de base pour implémenter un système de classement en temps réel, et les lecteurs peuvent les modifier et les optimiser en fonction des besoins réels.
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!