Redis如何在内部将String表示为位?

时间:2013-04-21 16:31:23

标签: redis

我正在尝试理解字符串的位表示(最具体的是在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如何表示为安全字符串?

1 个答案:

答案 0 :(得分:0)

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

来自redis.io

  

支持以下所有数据类型:

     
      
  • 二进制安全字符串。
  •   
  • 二进制安全字符串列表。
  •   
  • 二进制安全集   字符串,它是唯一未排序元素的集合。您可以   认为这是一个Ruby哈希,其中所有键都设置为'true'   值。
  •   
  • 排序集,类似于集,但每个元素都在   与浮点数得分相关联。元素按顺序排列   按分数。您可以将其视为Ruby哈希的关键所在   元素和值是分数,但元素总是在哪里   按顺序进行,无需进行分类操作。
  •   

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