关于Redis位图结构的内存存储问题

时间:2019-11-05 02:02:38

标签: redis bitmap

例如

> 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?

2 个答案:

答案 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范围,依此类推。