Choc! Redis peut compter les données utilisateur de cette manière

Supposons que le patron vous soumette une requête: "Little Fatty, laissez-moi compter le nombre d'utilisateurs (login) actifs dans notre système au cours du dernier mois.".

Ceux qui sont familiers avec les bases de données relationnelles savent que pour créer une table de connexion utilisateur, une requête SQL peut être effectuée.
comme ça:

select distinct userid from login_log 
where login_date >20201101 and log_date<20201130;

En supposant que les données de la table de connexion utilisateur sont extrêmement volumineuses, elles occupent beaucoup d'espace disque et, deuxièmement, une telle efficacité de requête SQL ne doit pas être élevée.

Vous pouvez demander, sinon?


Pour ce problème, Redis a vraiment une solution. Oui, c'est l'ordre.

Qu'est-ce que ça veut dire?

par exemple:

setbit k1 1 1 
/*设置k1的第二位为1,此时k1就是 0100 0000
(此命令会以字节为单位计值,ascii码是@,使用get k1会返回@)*/
setbit k1 14 1
/*此时 k1就是 0100 0000 0000 0010,十六进制是 @\x02 */

Pour le problème mentionné au début de ce qui précède, nous pouvons utiliser la date comme clé de Redis, trier les utilisateurs et les mapper à chaque bit sur la valeur, puis retirer chaque jour du mois en cours et effectuer une opération OU pour calculer la connexion du mois en cours. Le nombre d'utilisateurs et le bit computing sont ce pour quoi les ordinateurs sont très bons.

Regardons le point de connaissance des opérations sur les bits de Reids.

 

Utilisez-le comme ceci:

Après l'opération setbit, la valeur de k1 est 0100 0000 et la valeur de k2 est 0000 0000. Après le bitop et l'opération, le résultat est stocké dans k3. À ce moment, la valeur de k3 est 0000 0000, donc le résultat de obtenir k3 est \ x00.

Il n'est pas difficile de comprendre la situation de «ou opération».

Bon, revenons à la question mentionnée au début.

Nous avons configuré trois clés 20201101, 20201102, 20201103 pour représenter l'état de connexion quotidien de l'utilisateur, et chaque bit sur le bit représente l'état de connexion de chaque utilisateur, et la connexion le jour est définie sur 1.

En supposant que le 20e utilisateur se connecte le premier jour, le premier utilisateur se connecte le deuxième jour et le premier utilisateur se connecte le 03, c'est-à-dire que 2 utilisateurs se connectent trois fois. Comme indiqué ci-dessous:

 Dans la "ou opération" (déduplication des utilisateurs) sur la situation de connexion quotidienne, stockez le résultat de l'opération dans la variable reslut, puis comptez le nombre de 1 dans la variable.

Enfin, utilisez bitcount pour calculer le nombre d'utilisateurs connectés en tant que 2.


Pour résumer

Pour résumer brièvement, nous comptons les connexions des utilisateurs. En plus de l'utilisation traditionnelle des requêtes de base de données relationnelles, il existe une autre façon de penser qui consiste à utiliser la base de données mémoire basée sur les valeurs clés Redis.

Utilisez la commande setbit de Redis pour utiliser la date comme clé et mapper chaque utilisateur à chaque bit de la valeur. Utilisez ensuite bitop pour effectuer des opérations sur les bits pour lesquelles les ordinateurs sont très bons, et enfin utilisez bitcount pour calculer le nombre de bits de la valeur 1, qui est le nombre d'utilisateurs connectés.

D'accord, arrêtons-nous ici d'abord. Si vous pensez que c'est gratifiant, veuillez le transmettre sans pitié.

Je suppose que tu aimes

Origine blog.csdn.net/H517604180/article/details/110728374
conseillé
Classement