0

我正在尝试理解字符串的位表示(最特别是在 Redis 中)

我试过这个:

redis> SET mykey3 hello
OK
redis> SETBIT mykey3 7 0
(integer) 0
redis> SETBIT mykey3 7 1
(integer) 0
redis> GET mykey3
"iello"
redis> SET mykey4 5
OK
redis> SETBIT mykey4 7 0
(integer) 1
redis> GET mykey4
"4"

那么在这种情况下,“hello”和“5”的位表示是什么?

  • 还有其他 Redis 类型,List、Set、Sorted Set 是如何表示为二进制位的?这样的位操作可以为它工作吗?还是不是这样?
  • 从看起来一切都存储为二进制安全字符串?如果是这样,如何将 List、Set、Sorted Set 表示为安全字符串?
4

1 回答 1

0

如果您查看bitops.c,您会发现确实位命令仅适用于string key type

redis.io

支持以下所有数据类型作为值:

  • 二进制安全字符串。
  • 二进制安全字符串列表。
  • 二进制安全字符串集,它们是唯一未排序元素的集合。您可以将其视为 Ruby 哈希,其中所有键都设置为“真”值。
  • 排序集,类似于 Sets,但其中每个元素都与一个浮点数分数相关联。元素按分数排序。您可以将其视为 Ruby 哈希,其中键是元素,值是分数,但元素总是按顺序排列,而不需要排序操作。

因此,只有列表和集合存储在二进制安全字符串中。对于键和散列以及已排序的集合成员也是如此。

于 2013-04-23T06:53:31.047 回答