Redis --- mapa de bits

Tabla de contenido

fondo

estructura

Método de acceso

Estadísticas y búsquedas


fondo

Durante el proceso de desarrollo, habrá almacenamiento de tipo booleano, como registrar el estado de registro de un usuario los 365 días del año. Si hay una variable booleana todos los días, se utilizan varios usuarios o se utiliza el formato kv, la cantidad de almacenamiento será si Hay cientos de millones de usuarios, sorprendente. Así surgieron los mapas de bits de Redis.

Un valor ocupa un bit, 365 días significa 365 bits, 46 caracteres, que es una cadena más larga, lo que ahorra mucho espacio en la memoria.

estructura

No es una estructura de datos especial similar a una cola. El contenido es en realidad una cadena ordinaria. En términos de dígitos binarios, también es una matriz de bytes. Puede usar get y set índices para obtener o configurar directamente el mapa de bits completo. Contenido .

La matriz de Redis se expande automáticamente y si la posición de compensación excede las náuseas, se expandirá automáticamente.

Establezca directamente la cadena en "hola",

Código ASCII de saludo:
>>> bin(orden(' h '))
'0b1101000'
# Bit alto -> Bit bajo
>>> bin(ord(' e '))
'0b1100101'
>>> bin(orden(' l '))
'0b1101100'
>>> bin(orden(' l '))
'0b1101100'
>>> bin(ord(' o '))
'0b1101111'

 Tenga en cuenta que todos son ocho dígitos.

Para configurar los bits de una cadena, solo necesita configurar el bit con un valor de 1.

127.0.0.1:6379> establecer bits 1 1
(entero) 0
127.0.0.1:6379> establecer bits s 2 1
(entero) 0
127.0.0.1:6379> establecer bits s 4 1
(entero) 0
127.0.0.1:6379> establecer bits s 9 1
(entero) 0
127.0.0.1:6379> establecer bits 10 1
(entero) 0
127.0.0.1:6379> establecer bits s 13 1
(entero) 0
127.0.0.1:6379> establecer bits s 15 1
(entero) 0
127.0.0.1:6379> obtener s
"él"

 h tiene solo 1, 2, 4 bits y e tiene 9, 10, 13 y 15 bits (dos caracteres, 16 bits). El resultado directo es una cadena de "él".

Método de acceso

El ejemplo anterior puede entenderse como depósito cero y retiro de números enteros, depósito cero y retiro cero, depósito cero y retiro cero. El depósito cero consiste en establecer las posiciones una por una como se indica arriba. Todo el almacenamiento consiste en llenar todas las matrices de bits con la cadena a la vez, sobrescribiendo los valores antiguos.

Después de mirar la estructura y almacenamiento de los mapas de bits, los guardamos para obtener cantidades estadísticas y completar lo que necesitamos.

Estadísticas y búsquedas

Redis proporciona instrucciones de mapa de bits: bitcount y bitpos,

Bitcount se utiliza para contar el número de unos dentro de un rango de posición específico.

bitpos se utiliza para encontrar el primer 0 o 1 que aparece en el rango especificado 

Los siguientes parámetros son [inicio, fin], pero estos dos parámetros están en unidades de 8 bytes, es decir, 0 y 1 se refieren al primer byte que comienza y termina con el segundo, y el rango en realidad son los primeros dieciséis bits. . .

127.0.0.1:6379> establecer w hola
DE ACUERDO
127.0.0.1:6379> recuento de bits w
(entero) 21
127.0.0.1:6379> bitcount w 0 0 # Número de bits de 1 en el primer carácter
(entero) 3
127.0.0.1:6379> bitcount w 0 1 # Número de unos en los dos primeros caracteres
(entero) 7
   
127.0.0.1:6379> bitpos w 0 # El primer bit 0
(entero) 0
127.0.0.1:6379> bitpos w 1 #El primer bit
(entero) 1
127.0.0.1:6379> bitpos w 1 1 1 # A partir del segundo carácter, el primer bit
(entero) 9
127.0.0.1:6379> bitpos w 1 2 2 # A partir del tercer carácter, el primer bit
(entero) 17

Supongo que te gusta

Origin blog.csdn.net/Yoke______/article/details/132665094
Recomendado
Clasificación