Le code de test redis dans cet article est basé sur l'environnement suivant :
Système d'exploitation : Mac OS 64 bits
Version : Redis 5.0.7 64 bits# 🎜🎜##🎜🎜 #Mode d'exécution : mode autonome
opération de bit redis
l'opération de bit reids est également appelée opération de tableau de bits et bitmap. Elle fournit quatre commandes : SETBIT, GETBIT, BITCOUNT et BITTOP. Pour manipuler des tableaux de bits binaires.
Regardons d'abord un exemple d'opération de base
SETBIT# 🎜🎜#Syntaxe : Valeur de décalage de la touche SETBIT
C'est-à-dire : Décalage de la touche de commande 0/1
#🎜🎜 Le La commande #setbit est utilisée pour écrire la valeur de réglage du bit binaire au décalage spécifié dans le tableau de bits. Le décalage commence à compter à partir de 0, et seul 1 ou 0 peut être écrit si une valeur autre que 0 et 1 est écrite. l'écriture échoue :
GETBIT
Syntaxe : GETBIT key offset
C'est-à-dire : Décalage de la touche de commande
La commande gitbit est utilisée pour obtenir la valeur binaire au décalage spécifié du tableau de bits : #🎜🎜 #
BITCOUNTSyntaxe :BITCOUNT clé#🎜 🎜# C'est-à-dire :
Touche de commandeLa commande bitcount est utilisée pour obtenir le nombre de bits binaires avec une valeur de 1 dans le tableau de bits de la clé spécifiée Avant d'écrire le partiel La valeur du décalage 0 est 1, la valeur du décalage 10 est 1 et la valeur du décalage 8 est 0 :
#. 🎜🎜#
BITOPSyntaxe : Opération BITOP touche destkey [clé...]
#🎜 🎜#C'est-à-dire : Résultat de l'opération de commande Clé cible clé1 clé2...
La commande bitop peut exécuter et (ET au niveau du bit), ou (OU au niveau du bit), xor (au niveau du bit OU exclusif) sur les clés de plusieurs tableaux de bits) et définissez le résultat de l'opération sur destkey : 🎜🎜##🎜 🎜#SDS est une structure de données dans Redis, appelée Simple Dynamic String, et elle est sécurisée au niveau binaire. Dans la plupart des cas, les chaînes dans Redis sont stockées à l'aide de SDS.
Structure de données SDS :struct sdshdr { #记录buff数组中已使用字节的数量 #也是SDS所保存字符串的长度 int len; #记录buff数组中未使用字节的数量 int free; #字节数组,字符串就存储在这个数组里 char buff[]; }
Source de l'image "redis Design et mise en œuvre》
Avantages du SDS :Hongmeng Coopération stratégique et co-construction officielle - Communauté technologique HarmonyOS
#🎜🎜 #
La complexité temporelle est O(1)
Éliminer le débordement de tampon
# 🎜🎜 # Réduisez le nombre de réallocations de mémoire requises lors de la modification de la longueur de la chaîne
Tout le monde sait qu'un octet utilise 8 binaires Il est stocké en bits, c'est-à-dire 8 0 ou 1, c'est-à-dire qu'un octet peut stocker des nombres décimaux de 0 à 127, qui incluent tous les nombres, les lettres majuscules et minuscules anglaises et les signes de ponctuation.
1KB=1024Byte#🎜 🎜#
1MB=1024KB
1GB=1024MB
tableau de bits dans Redis Dans le monde du stockage, chaque octet fait également 8 bits, initialement :0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 #对应redis操作即: setbit key 3 1
setbit key 13 1 #对应redis中的存储为: 0 0 1 0 | 0 0 0 0 | 0 0 0 0 | 1 0 0 0
Complexité temporelle#🎜 🎜##🎜🎜 #
BITCOUNT complexité du temps de commande O(n)
#🎜🎜 #
BITOP temps de commande complexité O(n), O(n2) Voyons pourquoi la complexité temporelle des commandes GETBIT et SETBIT est O(1), lorsque lorsque nous exécutons une clé SETBIT 10086 1 valeur , les reids sont calculés comme suit :
Obtenez quel octet écrire dans le tableau de bits : 10086÷8=1260, qui doit être écrit dans le tableau de bits L'octet avec l'indice 1260
Grâce à ces deux méthodes de calcul, vous pouvez clairement voir que GETBIT et SETBIT des opérations sur bits sont des calculs constants, leur complexité temporelle est donc O(1).
La commande BITCOUNT doit parcourir tous les éléments de l'ensemble du tableau de bits pour calculer combien d'éléments ont une valeur de 1. Bien sûr, redis aura un ensemble d'algorithmes d'optimisation complexes pour exécuter la commande bitcount sur les bits contenant du Big Data, mais l'idée de base est toujours la même, qui n'est rien d'autre que de réduire le nombre de requêtes de parcours partiel. Si 128 bits sont explicitement utilisés pour un seul parcours, alors le nombre de fois qu'il doit parcourir est égal à tous les chiffres divisés par 128.
La commande BITTOP a différentes méthodes d'exécution selon différentes opérations. Par exemple, pour l’opération AND, vous devez vérifier que la valeur du bit est 1.
Calcul de l'espace de stockage
Sur la base de l'introduction ci-dessus, nous pouvons savoir comment calculer la mémoire occupée en utilisant des données de tableau de bits basées sur Redis structure pour stocker la taille des données. Par exemple, s'il y a 10 milliards de données, le tableau d'octets requis :
1000000000÷8÷1024÷1024≈119.21MB
C'est-à-dire pour stocker 1 milliard données, vous n'avez besoin que de l'espace mémoire d'environ 119 Mo, ce qui ne pose aucun problème pour les versions actuelles de cluster 16G et 32G de Redis.
Il est à noter que si la quantité de vos données n'est pas importante, ne faites pas en sorte que le décalage de départ soit très grand. Cela prendra également de la place. Par exemple, nous n'aurons besoin que d'en stocker quelques-unes. centaines de données, mais le décalage est très important, ce qui entraînera un gaspillage important d'espace mémoire.
Scénario d'application
Dans le développement de projets réels, de nombreuses entreprises peuvent être implémentées à l'aide de bits Redis.
Scénario de connexion utilisateur
La chaîne de date quotidienne est utilisée comme clé, l'ID utilisateur est utilisé comme décalage et le Le statut de connexion quotidienne des utilisateurs est comptabilisé. Nombre d'enregistrements d'utilisateurs
Statistiques des utilisateurs actifs
Activité quotidienne des utilisateurs, activité mensuelle, rétention. le taux, etc. peuvent tous être stockés à l'aide de tableaux de bits Redis, ou en utilisant la date quotidienne comme clé, si l'utilisateur est actif, écrivez le décalage comme valeur de bit 1 de l'ID utilisateur.
Il en va de même pour la vie mensuelle.
Si l'utilisateur est en ligne et le nombre total de personnes en ligne
Utilisez le même tableau de bits, définissez le décalage de bits de l'ID utilisateur mapper sur 1 Indique en ligne, défini sur 0 pour indiquer hors ligne. Il peut réaliser les statistiques des requêtes en ligne et hors ligne des utilisateurs et du nombre total de personnes en ligne. L'APP a la fonction de messagerie sur le site. Lorsqu'il y a des nouvelles, un petit point rouge s'affichera, indiquant que l'utilisateur a de nouvelles. nouvelles.
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!