顾名思义,它
SETBIT允许您执行位操作-将给定密钥的给定位设置为0或1,并且具有给定的位偏移量。
重要的是要理解,结果并不总是只包含可打印的字符。这就是Redis使用自定义函数
sdscatrepr格式化CLI输出的原因:
在sds字符串“ s”后面附加一个转义的字符串表示形式,其中所有不可打印的字符(通过isprint()测试)都以“ n r a
....”或“ x”的形式转义为转义。 。
话虽如此,让我们从一个简单的例子开始。如果考虑十六进制数
0x7F(= 127),则其在8位上的二进制表示为:
pos: 0 1 2 3 4 5 6 7bit: 0 1 1 1 1 1 1 1 ^ ^ | | MSBLSB
通常
SETBIT,可以使用该值来存储该值,请记住offset
0为,
MSB而offset 7为
LSB:
redis> SETBIT myval 0 0(integer) 0redis> SETBIT myval 1 1(integer) 0redis> SETBIT myval 2 1(integer) 0redis> SETBIT myval 3 1(integer) 0redis> SETBIT myval 4 1(integer) 0redis> SETBIT myval 5 1(integer) 0redis> SETBIT myval 6 1(integer) 0redis> SETBIT myval 7 1(integer) 0
获取您的价值来检查是否:
redis> GET myval"x7f"
现在,多字节会发生什么?假设您要存储
0x52(= 82)对应
R于ASCII中的字符。8位表示形式
01010010具有位位置,
(8, 9,..., 15)因为我们希望将其存储在第一个值之后:
redis> SETBIT myval 8 0(integer) 0redis> SETBIT myval 9 1(integer) 0redis> SETBIT myval 10 0(integer) 0redis> SETBIT myval 11 1(integer) 0redis> SETBIT myval 12 0(integer) 0redis> SETBIT myval 13 0(integer) 0redis> SETBIT myval 14 1(integer) 0redis> SETBIT myval 15 0(integer) 0
你会得到:
redis> GET myval"x7fR"
Redis CLI在这里可以表示可打印字符
R。
当我将字符串值1和7存储到“ mykey”中时
它对应于
01000001等于65
0x41的十六进制。它对应于ASCII字符
A。这样做:
redis> SETBIT mykey 1 1(integer) 0redis> SETBIT mykey 7 1(integer) 0
给出:
redis> GET mykey"A"
getbit如何在redis中工作?
它只是返回给定位置的位值。这里:
redis> GETBIT mykey 1(integer) 1
但是尚未设置位0(默认为0),因此:
redis> GETBIT mykey 0(integer) 0



