近似可看为byte类型是数组,可用于存储用户签到之类的非此即彼的信息,而且比价节省空间。本质上还是个字符串类型。
它是自动拓展的,如果偏移位置超出了现有的内容范围就会自动将位数组进行零扩充。
零存整取
setbit key offset value
注意ASCII码的二进制顺序与这里是逆向映射的。(也就说位数是从高到低)
零存零取
getbit指令…
整存零取
因为本质是个字符串嘛,所以可以存储,按位取即可
如果无法以字符的方式显示,则显示它的十六进制格式
查找与统计
bitcount key [start,end]
start end是可选项,查找key中的1的个数,start,end是第start个字节到end个字节(注意是[start,end]范围)。
bitpos key bit start end
同样start和end为可选项,查找key中指定范围(不指定为整串),第一个bit的位置。
bitfield
这个是多位进行操作的指令。
它有三个子指令,get、set、incrby。
最多可以处理连续的64个位(我怀疑与64位是64位机带宽有关?不过书中也没提32位,大概搜了下只支持有符号64位操作,无符号63位操作,或许之后原理篇会解答为什么吧)。果然超出可用多个指令拼接。
h 的ascii码为104 二进制为0110 1000
e的ascii码为101 二进制为0110 0101
l的ascii 108 二:0110 1100
o ascii 111 二:0110 1111
bitfield key get type offst
从偏移了offst位置的起始位置获取 type位的位数的十进制表示。其中type可分为无符号和有符号,无符号以u开头,有符号为i开头。
因为Redis的Integer类型是有符号的,64位,所以无符号仅能支持63位。
还可以拼接多个指令
bitfield key set type offset value
设置key从0偏移offset,将type位设置位value。
bitfield key incrby type offset step
从0偏移offset位,让type位自增step。
如果溢出则折返
还可以指定溢出策略
sat,保留在最大或最小(负方向的最远)值
fail溢出不执行
wrap默认模式,折返。