Maison  >  Article  >  base de données  >  Comment utiliser les opérations de bits Redis

Comment utiliser les opérations de bits Redis

WBOY
WBOYavant
2023-05-26 14:14:562213parcourir

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

Comment utiliser les opérations de bits Redis

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 :

GETBITComment utiliser les opérations de bits Redis

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 : #🎜🎜 #

BITCOUNT

Comment utiliser les opérations de bits Redis

Syntaxe :

BITCOUNT clé#🎜 🎜# C'est-à-dire :

Touche de commande

La 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 :

#. 🎜🎜#

BITOP

Syntaxe : Comment utiliser les opérations de bits RedisOpé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[];  }
Exemple de stockage de données :

Source de l'image "redis Design et mise en œuvre》Comment utiliser les opérations de bits Redis

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 tamponComment utiliser les opérations de bits Redis

# 🎜🎜 # Réduisez le nombre de réallocations de mémoire requises lors de la modification de la longueur de la chaîne

    Opérations API sécurisées binaires
  1. # 🎜🎜# Compatible avec quelques fonctions de chaîne C
  2. Pour une introduction détaillée à SDS, veuillez vous référer à l'article "Conception et implémentation de Redis".
  3. Le tableau de bits dans Redis est stocké au format de données de chaîne String et l'objet chaîne utilise la structure de données de chaîne dynamique simple SDS mentionnée ci-dessus.
  4. Source de l'image "Conception et implémentation de redis"
  5. 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.

  6. 1Byte=8bit

1KB=1024Byte#🎜 🎜#

1MB=1024KB

Comment utiliser les opérations de bits Redis

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
L'opération sur les bits consiste à définir 0 ou 1 sur le décalage correspondant, comme par exemple définir le troisième bit à 1 , c'est-à-dire :
0 0 0 0 1 0 0 0  #对应redis操作即:  setbit key 3 1
Sur cette base, si vous souhaitez définir 1 avec un décalage de 13, soit :
setbit key 13 1  #对应redis中的存储为:  0 0 1 0 | 0 0 0 0 | 0 0 0 0 | 1 0 0 0

Complexité temporelle#🎜 🎜##🎜🎜 #

GETBIT complexité du temps de commande O(1)


STEBIT temps de commande Complexité O(1)# 🎜🎜#

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

obtient le numéro de cet octet à écrire : 10086 mod 8 = 6, l'indice qui doit être écrit dans cet octet est 6, qui est la 7ème position Montez.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer