74- Redis 实战 - GETBIT命令的实现

GETBIT 命令用于返回位数组 bitarray 在 offset 偏移量上的二进制位的值:

GETBIT <bitarray> <offset>

GETBIT 命令的执行过程如下:

1、 计算1654329704360.png,byte值记录了offset偏移量指定的二进制位保存在位数组的哪个字节;
2、 计算1654329704362.png,bit值记录了offset偏移量指定的二进制位是byte字节的第几个二进制位;
3、 根据byte值和bit值,在位数组bitarray中定位offset偏移量指定的二进制位,并返回这个位的值;

举个例子, 对于图 IMAGE_BIT_EXAMPLE 所示的位数组来说, 命令:

GETBIT <bitarray> 3

将执行以下操作:

1、 1654329704365.png的值为0;
2、 1654329704366.png的值为4;
3、 定位到buf[0]字节上面,然后取出该字节上的第4个二进制位(从左向右数)的值;
4、 向客户端返回二进制位的值1;

命令的执行过程如图 IMAGE_SEARCH_EXAMPLE 所示。

1654329704368.png

再举一个例子, 对于图 IMAGE_ANOTHER_BIT_EXAMPLE 所示的位数组来说, 命令:

GETBIT <bitarray> 10

将执行以下操作:

1、 1654329704439.png的值为1;
2、 1654329704441.png的值为3;
3、 定位到buf[1]字节上面,然后取出该字节上的第3个二进制位的值;
4、 向客户端返回二进制位的值0;

命令的执行过程如图 IMAGE_ANOTHER_SEARCH_EXAMPLE 所示。

1654329704443.png

因为GETBIT 命令执行的所有操作都可以在常数时间内完成, 所以该命令的算法复杂度为 1654329704529.png