栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

有人可以解释redis setbit命令吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

有人可以解释redis setbit命令吗?

顾名思义,它

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/380825.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号