Maison  >  Article  >  développement back-end  >  3 façons d'implémenter le comptage unique dans Redis

3 façons d'implémenter le comptage unique dans Redis

高洛峰
高洛峰original
2017-02-08 09:39:572213parcourir

Le comptage unique est une fonctionnalité très courante dans les systèmes de sites Web. Par exemple, un site Web doit compter le nombre de visiteurs uniques (également appelés UV) qui visitent chaque jour. Les problèmes de comptage sont très courants, mais ils peuvent être très compliqués à résoudre : premièrement, la quantité à compter peut être très importante, par exemple, un grand site est visité par des millions de personnes chaque jour et la quantité de données est assez grand ; deuxièmement, il est généralement souhaitable d'élargir la dimension du comptage. Par exemple, en plus des UV quotidiens, vous souhaitez également connaître les UV hebdomadaires ou mensuels, ce qui rend le calcul très compliqué.

Dans un système de stockage de base de données relationnelle, la méthode pour obtenir un comptage unique est select count(distinct 9582cf303f30b9f4319d93f9b5ae353f). C'est très simple, mais si la quantité de données est importante, l'exécution de cette instruction est importante. très lent. Un autre problème lié à l'utilisation de bases de données relationnelles est que les performances d'insertion des données ne sont pas élevées.

Redis résout ce genre de problème de comptage très facilement. Il est plus rapide et consomme moins de ressources que les bases de données relationnelles. Il propose même 3 méthodes différentes.

1. Ensemble basé sur l'ensemble

Redis est utilisé pour enregistrer un ensemble de données unique. Grâce à lui, vous pouvez déterminer rapidement si un élément existe dans l'ensemble, et vous pouvez également calculer rapidement le. éléments d'un certain nombre, en plus et peuvent être fusionnés dans un nouvel ensemble. Les commandes impliquées sont les suivantes :

SISMEMBER key member  # 判断 member 是否存在
SADD key member  # 往集合中加入 member
SCARD key   # 获取集合元素个数

La méthode basée sur les ensembles est simple et efficace, a un comptage précis, une large application et est facile à comprendre. Son inconvénient est qu'elle consomme beaucoup de ressources (. bien sûr, c'est bien moins qu'une base de données relationnelle), si le nombre d'éléments est important (par exemple des centaines de millions), la consommation de mémoire est terrible.

2. Bit basé sur le bit

Redis peut être utilisé pour implémenter un comptage plus compressé que la mémoire définie. Il utilise un bit 1 ou 0 pour stocker des informations indiquant si un élément existe. Par exemple, pour le nombre de visiteurs uniques d'un site Web, user_id peut être utilisé comme décalage du bit. S'il est défini sur 1, cela signifie qu'il y a un accès utilisant 1 Mo d'espace, le nombre d'accès d'une journée est supérieur. plus de 8 millions d'utilisateurs peuvent être stockés. Les commandes impliquées sont les suivantes :

SETBIT key offset value  # 设置位信息
GETBIT key offset        # 获取位信息
BITCOUNT key [start end] # 计数
BITOP operation destkey key [key ...]  # 位图合并

La méthode basée sur les bits consomme beaucoup moins d'espace que l'ensemble, mais elle nécessite que les éléments puissent être simplement mappés sur des décalages de bits, et la portée applicable est beaucoup plus étroite. De plus, il consomme L'espace dépend du décalage maximum et n'a rien à voir avec la valeur de comptage. Si le décalage maximum est grand, la consommation de mémoire est également considérable.

3. Il est difficile d'obtenir un comptage unique et précis de quantités extrêmement importantes de données basées sur HyperLogLog

, mais s'il ne s'agit que d'une approximation, il existe de nombreux algorithmes efficaces en informatique, parmi dont HyperLogLog Counting est l'un d'entre eux. Un algorithme très célèbre qui peut réaliser des centaines de millions de comptes uniques en utilisant seulement environ 12 Ko de mémoire, et l'erreur est contrôlée à environ 1 pour cent. Les commandes impliquées sont les suivantes :

PFADD key element [element ...]  # 加入元素
PFCOUNT key [key ...]   # 计数

Cette méthode de comptage est vraiment magique, et je ne l'ai pas encore bien comprise. Si vous êtes intéressé, vous pouvez étudier en profondeur les articles concernés.

Les trois méthodes de comptage uniques fournies par redis ont chacune leurs propres avantages et inconvénients et peuvent pleinement répondre aux exigences de comptage dans différentes situations.

Pour plus de 3 façons d'implémenter le comptage unique dans Redis, veuillez prêter attention au site Web PHP chinois pour partager des articles connexes !

Déclaration:
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