Dans le processus de développement quotidien, il faut souvent accéder à des données de type booléen. Par exemple, si vous enregistrez le nombre de fois qu'un utilisateur s'est enregistré au cours d'une année, le nombre de fois qu'un utilisateur s'est enregistré est 1 et le nombre de fois qu'un utilisateur ne s'est pas connecté est 0. Si la valeur-clé est utilisée pour le stockage, chaque utilisateur sera enregistré 365 fois. Lorsqu'il y aura des centaines de millions d'utilisateurs, l'espace de stockage requis sera très énorme. Pour résoudre ce problème, vous pouvez utiliser des bitmaps dans Redis.
Bitmap (bitmap) appartient également au type de données chaîne. Une valeur de type chaîne dans Redis peut stocker jusqu'à 512 Mo de contenu. Chaque chaîne est composée de plusieurs octets et chaque octet est composé de 8 bits. La structure bitmap utilise des « bits » pour réaliser le stockage. Elle atteint l'objectif d'accès aux données en définissant les bits sur 0 ou 1, ce qui augmente considérablement le nombre de valeurs stockées, et sa limite supérieure de stockage est de 2 ^ 32.
Un bitmap est essentiellement une chaîne d'octets ordinaire, c'est-à-dire un tableau d'octets. Ce tableau de bitmaps peut être traité à l'aide de la commande getbit/setbit, et sa structure est la suivante :
Les bitmaps sont généralement utilisés pour certaines applications spécifiques, tels que le suivi du nombre d'enregistrements ou de connexions d'utilisateurs. L'image ci-dessus montre le nombre d'enregistrements qu'un utilisateur a visité le site Web dans les 10 jours. 1 représente une connexion et 0 représente un non-enregistrement. De cette façon, le niveau d'activité de l'utilisateur peut être facilement compté. L'utilisation d'un bitmap pour enregistrer chaque enregistrement n'occupe qu'un seul bit, ce qui réduit considérablement l'utilisation de l'espace mémoire par rapport à l'utilisation directe de chaînes.
Les responsables de Redis ont également mené une expérience. Ils ont simulé un système avec 128 millions d'utilisateurs, puis ont utilisé des bitmaps Redis pour compter le "nombre moyen d'utilisateurs quotidiens" et le temps final passé. Cela prend environ 50 ms et seulement occupe 16 Mo de mémoire.
Si un stockage de type chaîne est utilisé, un site Web doit enregistrer l'enregistrement d'enregistrement d'un utilisateur pendant un an, puis 365 paires clé-valeur sont requises. Si le stockage bitmap est utilisé, 1 est stocké lorsque l’utilisateur se connecte, sinon 0 est stocké. En fin de compte, un résultat de stockage tel que 00010101... sera généré, dans lequel l'enregistrement de chaque jour n'occupe qu'un bit, et une année équivaut à 365 bits, soit environ 46 octets. Si vous souhaitez uniquement compter le nombre de jours pendant lesquels les utilisateurs se sont connectés, comptez le nombre 1.
L'avantage des opérations bitmap est que par rapport aux chaînes, elles sont non seulement très efficaces, mais aussi très peu encombrantes.
Le tableau de bits de Redis est automatiquement étendu. Si une position de décalage est définie au-delà de la plage de contenu existante, le tableau de bits sera automatiquement étendu.
est utilisée pour définir ou effacer la valeur d'un certain bit, et sa valeur de retour est la bit d'origine sur lequel la valeur est stockée. Dans l'état initial, tous les bits de clé sont à 0. L'exemple est le suivant :
SETBIT key offset value
où offset représente le décalage, en partant de 0. Les exemples sont les suivants :
127.0.0.1:6379> SET user:1 a OK #设置偏移量offset为0 127.0.0.1:6379> SETBIT user:1 0 1 (integer) 0 #当对应位的字符是不可打印字符,redis会以16进制形式显示 127.0.0.1:6379> GET user:1 "\xe1"
est utilisée pour obtenir la valeur d'un certain bit. Les exemples sont les suivants :
127.0.0.1:6379> GETBIT user:1 0 (integer) 1
Lorsque le décalage est supérieur à la longueur de la chaîne, ou lorsque la clé n'existe pas, 0 est renvoyé.
redis> EXISTS bits (integer) 0 redis> GETBIT bits 100000 (integer) 0
Compte le nombre de valeurs1 dans l'intervalle de positionnement spécifié. Le format de syntaxe est le suivant :
BITCOUNT key [start end]
L'exemple est le suivant :
127.0.0.1:6379> BITCOUNT user:1 (integer) 8
Spécifiez simplement les paramètres de début et de fin pour ne compter que des octets spécifiques. Les paramètres de début et de fin sont similaires aux paramètres de la commande GETRANGE. Des nombres négatifs peuvent être utilisés. Par exemple, -1 représente le premier chiffre du dernier et -2 représente le deuxième chiffre du dernier. .
Effectuez des opérations sur les bits sur une ou plusieurs clés de chaîne qui stockent les bits binaires et enregistrez les résultats dans destkey
L'opération peut être de l'un des quatre types suivants : AND, OR, NOT ou effectuer une union logique de plusieurs clés et enregistrer le résultat dans destkey.
BITOP OR destkey key [key …] , effectuez un OU logique sur une ou plusieurs clés et enregistrez le résultat dans - destkey .
BITOP XOR destkey key [key …] , effectuez un XOR logique sur une ou plusieurs clés et enregistrez le résultat dans destkey .
BITOP NOT destkey key, effectuez une négation logique sur la clé donnée et enregistrez le résultat dans destkey.
À l'exception des opérations NOT, d'autres opérations peuvent accepter une ou plusieurs touches en entrée.
Statistiques des utilisateurs actifs ce jour-là
Chaque utilisateur crée une clé bitmap, basée sur un certain. jour, et le nombre de jours suivants est à partir de ce jour. Le nombre de jours est le décalage,
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!