redis BITFIELD详解

Redis BITFIELD 命令允许将字符串视为位数组,支持GET、SET、INCRBY等子命令,对不同宽度的整型位域进行操作。可以处理有符号和无符号整型,最大支持64位有符号和63位无符号整型。OVERFLOW选项可设定溢出行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

支持子命令和整型

本命令会把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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值