Redis-Bitfield常用命令

Redis-Bitfield常用命令

类型说明:将一个redis字符串看作是一个由二进制组成的数组,可以直接寻址和修改指定的整型位域

bitfield key get

对字符串类型的key,进行bitfield访问,即根据二进制位寻址。返回指定区间的二进制位所对应的位域值。

参数k1:操作的目标key

get:表示当前命令为获取,而非修改

i8:表示向后取8个二进制位

0:表示从0开始

127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> BITFIELD k1 get i8 0 #获取 k1中  从0开始,向后8个二进制位 的位域数值
104

 

bitfield key set

对字符串类型的key,进行bitfield修改,即根据二进制位寻址,并修改字符串中指定位置的位域

参数k1:操作的目标key

set:表示当前命令为修改,而非获取

i8:表示向后取8个二进制位

0:表示从0开始

120:是值位域120所表示的字符,表示要修改为120

127.0.0.1:6379> BITFIELD k1 set i8 0 120 # 修改 k1中 从0开始 向后8个二进制位 将此区间的二进制所表示的字符,修改为120(位域)
104
127.0.0.1:6379> get k1 # 结果是将hello中的h修改为了x。位域120表示的则是字符x
xello

bitfield key incrby

将字符串类型的key,根据二进制位寻址,并将指定位置的位域值进行增加

参数k1:操作的目标key

incrby:表示增加

2:表示从2往后的3开始

u4:表示向后取4个二进制位

1:表示将取到的二进制位所对应的位域+1

127.0.0.1:6379> bitfield k1 incrby u4 2 1 # 将k1中的值转换为二进制存储方式,并从第3位开始,向后4位,将此区间的二进制位所表示的位域,进行+1。即hello的h+1后变成l
11
127.0.0.1:6379> get k1
lello

 溢出控制

说明:位域的最大值是127,如果将其设置为大于127,或者使用incrby命令一直增加,使其增加到大于127。就是溢出。

三种处理溢出的方式:这里好像不太对,有空再看

wrap:使用回绕方法处理溢出,位域超过127后再次增加数值则回到-118

sat:饱和计算,超过最大值再增加则数值仍不变

fail:超过最大值127再增加,则命令直接报错,拒绝指定

 

使用示例:

127.0.0.1:6379> bitfield k1 overflow sat set i8 0 128 # overflow 后面跟处理溢出的方式
-128

 

posted @ 2023-06-24 19:35  邵杠杠  阅读(637)  评论(0编辑  收藏  举报