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

约书亚记
> setbit mykey 1 1
> setbit mykey 7 1

当我将字符串值1和7存储到“ mykey”中时,redis中到底存储了什么?以及getbit在redis中如何工作?

是否有人试图在此值内循环位?我知道bitcount会给我数字2,但我也想从中获得确切的字符串值1和7,这可能吗?

-

我通过使用erlang redis客户端读取输出进行了一些实验。

> setbit mykey 1 1

erlang输出:

<<"@">>

然后删除此条目:

> del mykey

我做同样的事情来偏移2 4 8,在这里您可以看到映射:

When offset is 1, the output is <<"@">>;
When offset is 2, the output is <<" ">>;
When offset is 4, the output is <<"\b">>;
When offset is 8, the output is <<0,128>>;

老实说,我现在更加困惑。

或者有人可以解释这个“ bitops.c”

- 更新 - -

也许我应该提到为什么要这样做以使问题更加清楚。众所周知,使用位图存储在线用户会很酷。我想做的是从存储的Redis中获取确切的在线用户ID。

刚刚完成一个快速版本,可从Redis中提取偏移量。请随时进行改进。

地尔

顾名思义,它SETBIT允许您执行位操作-即将给定键的给定位设置为0或1,且偏移量为给定值。

重要的是要理解,结果并不总是只包含可打印的字符。这就是为什么Redis使用自定义函数sdscatrepr格式化CLI输出的原因:

在sds字符串“ s”后面附加一个转义的字符串表示形式,其中所有不可打印的字符(使用isprint()测试)都以“ \ n \ r \ a ....”或“ \ x”的形式转义为转义。 。

话虽如此,让我们从一个简单的例子开始。如果考虑十六进制数0x7F(= 127),则其在8位上的二进制表示为:

pos: 0 1 2 3 4 5 6 7
bit: 0 1 1 1 1 1 1 1
     ^             ^
     |             |
     MSB           LSB

通常,您可以使用SETBIT该值来存储该值,请记住offset0为,MSB而offset 7为LSB

redis> SETBIT myval 0 0
(integer) 0
redis> SETBIT myval 1 1
(integer) 0
redis> SETBIT myval 2 1
(integer) 0
redis> SETBIT myval 3 1
(integer) 0
redis> SETBIT myval 4 1
(integer) 0
redis> SETBIT myval 5 1
(integer) 0
redis> SETBIT myval 6 1
(integer) 0
redis> 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) 0
redis> SETBIT myval 9 1
(integer) 0
redis> SETBIT myval 10 0
(integer) 0
redis> SETBIT myval 11 1
(integer) 0
redis> SETBIT myval 12 0
(integer) 0
redis> SETBIT myval 13 0
(integer) 0
redis> SETBIT myval 14 1
(integer) 0
redis> SETBIT myval 15 0
(integer) 0

你会得到:

redis> GET myval
"\x7fR"

Redis CLI在这里可以表示可打印字符R

当我将字符串值1和7存储到“ mykey”中时

对应于01000001等于650x41的十六进制。它对应于ASCII字符A这样做:

redis> SETBIT mykey 1 1
(integer) 0
redis> 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有人可以解释吗?

来自分类Dev

有人可以解释WaitForSeconds()吗?

来自分类Dev

有人可以解释输出吗?

来自分类Dev

有人可以解释此命令的作用吗?

来自分类Dev

有人可以解释堆栈上下文吗?

来自分类Dev

有人可以解释__set和__get的重载吗?

来自分类Dev

python tuple,有人可以解释这种行为吗?

来自分类Dev

有人可以解释这个(void **)&d_in吗?

来自分类Dev

有人可以解释cvPtr的OpenCV文档吗?

来自分类Dev

有人可以解释堆栈上下文吗?

来自分类Dev

有人可以全面解释WebRTC统计API吗?

来自分类Dev

有人可以解释i +++ x吗?

来自分类Dev

有人可以解释这本词典的行为吗?

来自分类Dev

VBA中的数组下标-有人可以解释吗?

来自分类Dev

有人可以解释Selenium中的Screenshot吗?

来自分类Dev

有人可以向我解释此代码吗?

来自分类Dev

有人可以解释Shell Shock Bash代码吗?

来自分类Dev

奇怪的红宝石行为。有人可以解释吗?

来自分类Dev

有人可以很好地解释Dagger 2吗?

来自分类Dev

有人可以准确解释这些gsub参数吗?

来自分类Dev

有人可以解释jQuery.sap.setObject吗?

来自分类Dev

有人可以解释AWS GET吗?

来自分类Dev

有人可以解释.wav(WAVE)文件头吗?

来自分类Dev

有人可以解释双递归python吗?

来自分类Dev

有人可以解释“使用”的含义吗?

来自分类Dev

有人可以解释下面的scala代码吗?

来自分类Dev

有人可以解释给定循环的行为吗?

来自分类Dev

有人可以为我解释这个递归吗?

来自分类Dev

有人可以解释该程序的控制流程吗?