redis用bitfield存储的问题

//clear and set
client.del('my_bitfield',redis.print)
client.send_command("bitfield",['my_bitfield','SET','u4','#0',parseInt('0111',2)],redis.print)
//get 
client.get('my_bitfield',function(err, reply){
    console.log(reply) // p
})

想用redis的bitfield存储4位二进制的值,例如存储0111
但是用get命令取回来数据后,打印出一个字符串p,字符串转二进制显示 p代表01110000
为什么get到的数据会比我set的多了一些0000呢?

测试2

client.send_command("bitfield",['my_bitfield','SET','u4','#0',parseInt('0111',2)],redis.print)
client.send_command("bitfield",['my_bitfield','SET','u4','#1',parseInt('0111',2)],redis.print)

这次我存了两个offeset,打印出的结果是w 对应01110111 又变正常了。。
请问这是什么问题?
正确的存储方式是什么。。。
//测试文件

const redis = require('redis'),
      RDS_PORT = 6379,
      RDS_HOST = '139.199.33.69',
      RDS_OPTS = {},
      client = redis.createClient(RDS_PORT, RDS_HOST, RDS_OPTS);
console.log('redis ready')



client.del('my_bitfield',redis.print)
client.send_command("bitfield",['my_bitfield','SET','u4','#0',parseInt('0111',2)],redis.print)
client.send_command("bitfield",['my_bitfield','SET','u4','#1',parseInt('0111',2)],redis.print)



client.get('my_bitfield',function(err, reply){
    if(err) {
        console.log(err)
    }
    console.log(typeof reply)
    console.log(reply)
    console.log(reply.length)
})

如果需要测试代码可以用上面的 redis服务器是放在腾讯云上的

阅读 6.2k
1 个回答
新手上路,请多包涵

你存一个值,分配1byte(8bit),只用了1byte的高位的4bit,低位的4bit已经分配,无值,所以是0.
图片描述
图里的70 也就是01110000
你直接get得到是字符串,本来存的是二进制,可以改转化为buffer,在nodejs里的ioredis有方法的,getBuffer,然后新建一个Uint8Array()保存,具体看下面图:
图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题