Redis bitcount

Redis bitcount

Estructuras de datos Redis

Redis es una implementación de siguiente nivel de tiendas de valores clave tradicionales. No se limita a mantener los valores de cadena para una clave dada. Redis puede almacenar estructuras de datos más complejas (tipos) como listas, hashes, conjuntos y mapas de bits (matrices de bits). El tipo de datos de cadena todavía está disponible en Redis. Se ha utilizado para implementar algunas de estas complejas operaciones de estructura de datos.

¿Qué son los mapas de bits redis??

El mapa de bits no es un tipo de datos nativo en Redis. Su implementación subyacente se basa en el tipo de datos de cadena. Es un conjunto de funcionalidades basadas en el tipo de datos de cadena. La forma más fácil de entender un mapa de bits es pensarlo como una variedad de bits.

Como se mencionó anteriormente, esta es una representación de cadena con capacidades de operación de bits. La broca es el tamaño de almacenamiento más pequeño dentro de una computadora. Por lo tanto, cada bit puede almacenar 1 o 0 en un momento dado.

La longitud máxima de una cadena Redis es 512 MB. Si convertimos este valor en bits, son aproximadamente 4 mil millones de bits que es más que suficiente para usar en una aplicación del mundo real. Llamamos al índice de matriz "offset" en Redis Bitmaps. Echemos un vistazo al siguiente ejemplo.

Operaciones de mapa de bits

Hay dos tipos principales de operaciones asociadas con los mapas de bits redis. Las operaciones de un solo bit se realizan en un bit específico, como obtener un valor o un valor establecido. Hay otro tipo de operación que se realiza en un grupo de bits, como bitcount.

El comando bitcount

El comando BitCount es una operación de tipo por lotes. Cuenta el número de ocurrencias de "1" en un mapa de bits o cadena determinado. Llamamos a esto "conteo de población" o cuenta de bits establecidos.

Sintaxis

1
BitCount your_key [interval_start interval_end] [byte | POCO]

Tu llave: Esta es la clave de la cadena o mapa de bits. Es un parámetro obligatorio.

Interval_start, interval_end: Estos dos parámetros especifican el rango utilizando los índices de inicio y finalización. Estos dos parámetros son opcionales.

Byte o bit: Este parámetro especifica el inicio y el final del intervalo como un índice de byte o índice de bits. Este parámetro es opcional. Por defecto, se usa byte.

Ejemplo 01

Creemos una clave "Ejemplo1" y establezcamos los valores del segundo y cuarto bits en 1. Usaremos el Redis setbit comandar aquí.

1
2
3
setBit Ejemplo1 2 1
setBit Ejemplo1 4 1

Producción:

Verifiquemos el valor del índice de mapa de bits creado usando Redis getbit dominio.

1
2
3
GetBit Ejemplo1 2
GetBit Ejemplo1 4

Producción:

Los bits 2º y 4º se establecen en 1 como se esperaba.

Usemos el Cuenta de bits Comando para contar el número de bits o 1 en el ejemplo1 de bitmap de ejemplo1.

1
Ejemplo de cuenta de bit11

Producción:

El mapa de bits de ejemplo1 se parece al siguiente.

0 0 1 0 1

Como puede ver, el segundo y el cuarto se establecen en 1. Por lo tanto, la cuenta de bits La salida del comando debe ser 2 como arriba.

Ejemplo 02

Creemos una nueva clave Ejemplo2 y asignemos la cadena "A."La cadena A está representada por 8 bits (1 byte), como se muestra en lo siguiente.

0 1 0 0 0 0 0 1
1
Ejecutar el ejemplo2 "A"

Producción:

Usemos el cuenta de bits Comando para verificar el número de bits establecidos. Desde que obtuvimos el primer y séptimo bit establecido en 1, el cuenta de bits La salida del comando debe ser 2.

1
Ejemplo de bitcount2

Producción:

Normalmente, el cuenta de bits Comando verifica todos los bytes contenidos en la matriz. En algunos escenarios, podría ser un proceso redundante examinar todos los bytes en un mapa de bits o cadena. Por lo tanto, podemos especificar un rango para realizar el cuenta de bits operación como se muestra en lo siguiente.

1
BitCount Key start_index end_index

Por defecto, el start_index y end_index Los valores de los parámetros se basan en los índices de bytes. Probemos esto en el siguiente ejemplo.

Ejemplo 03

Crearemos una nueva clave llamada Ejemplo3 y asignaremos el valor "AB."

1
Establecer Ejemplo3 "AB"

La cadena Ejemplo3 debe parecerse a la siguiente.

0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
| A | B

Los primeros 8 bits representan la letra A y los segundos 8 bits representan la letra B. La cadena "AB" toma 2 bytes. Usemos el comando bitcount para contar el número de bits establecidos para un intervalo dado.

1
Bitcount Ejemplo3 0 0

Hemos especificado los índices de byte de inicio y finalización como 0 en el comando anterior. Eso significa que contará los 1 en el primer byte (8 bits) solamente. Por lo tanto, el valor de salida debe ser 2.

Producción:

Si especificamos los índices de inicio y finalización como 1, el comando BitCount contará bits de conjunto solo en el segundo byte (segundo 8 bits), que representa la letra B. Debería ser dos de nuevo.

1
Bitcount Ejemplo3 1 1

Producción:

Podemos recuperar todos los bits establecidos en la cadena "AB" especificando el rango de 0 ° byte a 1er byte. La salida debe ser cuatro ya que obtuvimos cuatro 1 en toda la cadena.

1
Bitcount Ejemplo3 0 1

Producción:

El cuenta de bits El comando permite a los usuarios especificar el intervalo utilizando el índice de bits. La cadena "AB" tiene 16 bits, como se muestra en la ilustración anterior. Por lo tanto, el intervalo mínimo y los índices máximos serán 0 y 15, respectivamente. Necesitamos especificar esto explícitamente al comando redis utilizando el POCO argumento. Entonces el cuenta de bits El comando tratará los índices de inicio y finalización como un índice de bits.

Cuentemos los setbits desde el primer bit (índice 0) al 4to bit (3er índice)

1
bitcount Ejemplo3 0 3 bits

Observe el recién aprobado POCO argumento. Ahora examina los bits establecidos del índice de 0 ° a 3er bits. La salida debe ser una.

0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
|< = = = > |
Solo 1 bit de conjunto está en este rango

Producción:

A continuación, daremos el intervalo desde el 1er bit (índice de bits) al décimo bit (índice de 9º bits).

1
bitcount Ejemplo3 0 9 bits
0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
|< = = = = = = = = = = > |
Solo 3 bits establecidos están en este rango

Según la ilustración anterior, la salida debe ser 3.

Producción:

Conclusión

Redis puede almacenar diferentes tipos de estructuras de datos para una clave específica. Los mapas de bits son una de las estructuras de datos útiles que Redis admite. La implementación subyacente es una representación de cadena con operaciones de mapa de bits compatible con. El bitcount es un comando Redis que se puede usar para contar el número de bits establecidos en un mapa de bits o cadena determinado.