使用字符串命令对位图进行操作

因为 Redis 的位图是在字符串的基础上实现的,所以它会把位图键看作一个字符串键:

redis> SETBIT bitmap 0 1
(integer) 0
redis> TYPE bitmap
string

因此用户除了可以使用前面介绍的位图命令对位图进行操作之外,还可以使用字符串命令对位图进行操作。

比如,我们可以通过执行 GET 命令来获取整个位图:

redis> GET 8bit-int
"\x04"
redis> GET 32bit-ints
"\x00\x00\x00{\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00'f"

也可以使用 STRLEN 命令获取位图的字节长度:

redis> STRLEN 8bit-int -- 这个位图长1字节
(integer) 1
redis> STRLEN 32bit-ints -- 这个位图长16字节
(integer) 16

还可以使用 GETRANGE 命令去获取位图的其中一部分字节:

redis> GETRANGE 32bit-ints 0 3 -- 获取位图的前4个字节
"\x00\x00\x00{"

诸如此类。

正如上面的 GET 命令和 GETRANGE 命令所示,当我们使用字符串命令获取位图的值时,命令返回的是一个字符串,而不是一个二进制形式的位图:比如 GET 命令返回的就是字符串 "\x04" 而不是二进制位图 00000100。因此我们在使用字符串命令操作位图的时候,必须先将命令返回的字符串转换回二进制形式,然后再执行具体的二进制操作。