例如
> SETBIT bitmapsarestrings 2 1
> SETBIT bitmapsarestrings 3 1
> SETBIT bitmapsarestrings 5 1
> SETBIT bitmapsarestrings 10 1
> SETBIT bitmapsarestrings 11 1
> SETBIT bitmapsarestrings 14 1
> GET bitmapsarestrings
"42"
二进制存储不应该这样: 0010 0110 0001 1100 吗?
以这种方式存储,为什么值是42?
答案 0 :(得分:1)
这些SETBIT
操作将使值成为二进制字符串,其长度为2个字节或16位。设置后,值将为二进制格式的0b 00110100 00110010
。
第一个字节(0b 00110100
)是52
,它是'4'的ASCII码,第二个字节(0b 00110010
)是50
,它是ASCII码“ 2”。因此,当您获取字符串的值时,它将返回“ 42”。
答案 1 :(得分:0)
@for_stack所说的内容,或仅参考该示例上方的行(https://redis.io/commands/setbit):
位图不是实际的数据类型,而是在String类型上定义的一组面向位的操作(有关更多信息,请参阅“数据类型简介”页面的“位图”部分)。这意味着位图可以与字符串命令一起使用,最重要的是可以与SET和GET一起使用。
由于Redis的字符串是二进制安全的,因此将位图微不足道地编码为字节流。字符串的第一个字节对应于位图的偏移量0..7,第二个字节对应于8..15范围,依此类推。