支持子命令和整型
本命令会把Redis字符串当作位数组,并能对变长位宽和任意未字节对齐的指定整型位域进行寻址。
下面是已支持的命令列表:
- GET
<type>
<offset>
– 返回指定的位域 - SET
<type>
<offset>
<value>
– 设置指定位域的值并返回它的原值 - INCRBY
<type>
<offset>
<increment>
– 自增或自减(如果increment为负数)指定位域的值并返回它的新值
还有一个命令通过设置溢出行为来改变调用INCRBY
指令的后序操作:
- OVERFLOW
[WRAP|SAT|FAIL]
当需要一个整型时,有符号整型需在位数前加i,无符号在位数前加u
。例如,u8
是一个8位的无符号整型,i16
是一个16位的有符号整型。
有符号整型最大支持64位,而无符号整型最大支持63位。对无符号整型的限制,是由于当前Redis协议不能在响应消息中返回64位无符号整数。
172.16.0.80:6379> set test a
OK
172.16.0.80:6379> bitfield test get i8 0 #a对应的ascll码值97
1) (integer) 97
172.16.0.80:6379> bitfield test set i8 0 127 #i8表示有符号8位二进制,范围(-128-127)
1) (integer) 97
172.16.0.80:6379> bitfield test get i8 0
1) (integer) 127
172.16.0.80:6379> bitfield test set i8 0 128 #默认overflow为wrap,即循环溢出
1) (integer) 127
172.16.0.80:6379> bitfield test get i8 0
1) (integer) -128
172.16.0.80:6379> bitfield test overflow sat set i8 0 128 #使用sat
1) (integer) -128
172.16.0.80:6379> bitfield test get i8 0
1) (integer) 127
172.16.0.80:6379> bitfield test overflow fail set i8 0 128 #使用fail
1) (nil)
172.16.0.80:6379> bitfield test get i8 0
1) (integer) 127
172.16.0.80:6379> bitfield test get u2 0 #u2无符号2位2进制数,范围(0-3)
1) (integer) 1
172.16.0.80:6379> bitfield test incrby u2 0 3 #默认wrap
1) (integer) 0
172.16.0.80:6379> bitfield test overflow sat incrby u2 0 4 #使用sat
1) (integer) 3
172.16.0.80:6379> bitfield test overflow fail incrby u2 0 1 #使用fail
1) (nil)
172.16.0.80:6379> set test a #0110 0001
OK
172.16.0.80:6379> bitfield test get i8 0 #0110 0001对应97
1) (integer) 97
172.16.0.80:6379> bitfield test get i8 1 #1100 0010有符号二进制对应十进制-62
1) (integer) -62