2013-07-17 42 views
1

在Redis的协议规范,它提到:二进制安全的Redis

“状态回复是不是二进制安全的,可以不包括换行。”字符串/文件是二进制安全的意味着什么?为什么在redis中不能状态回复是二进制安全的?

+0

在redis键和键名称数据是二进制安全的,这里是redis命令回复谁不是二进制安全的,只是标准的ascii字符串,更容易处理 – r043v

回答

3

二进制安全字符串分析程序在字符串中以单个字符计算所有可能的值0 - 255,该字符串可能不以null结尾(否则它的长度是已知的)。如果一个字符串解析器不是二进制安全的,它会期望一个以空字符结尾的字符串(字符串的二进制0)。

通常,字符串解析器不是二进制安全的。许多解析期望正常的可打印字符和字符串末尾的0。如果在这种字符串的末尾没有0,则可能很容易出现分段错误。

二进制安全解析器可能解析任意数据(可能是文本或其他内容)。

编辑:“这是什么意思的字符串/文件是二进制安全的”

  • 这是文本解析器是二进制安全的,而不是字符串/文件本身。然而,如果一个字符串被称为二进制安全,我会怀疑这意味着它是一个以空字符结尾的标准ASCII字符的字符串。

“为什么在redis中不能状态回复是二进制安全的?”

  • 因为它检查解析器实现回复\r\n第一实例结束。这是解析器如何计算出字符串的长度。因此,如果在回复结束前找到\r\n,它会停止解析并在之后忽略所有内容。

除非状态回复需要发送二进制数据,否则不需要它们是二进制安全的。

+0

我想你的意思是说:“但是,如果一个字符串被称为二进制安全,我会怀疑这意味着它不是一个以null结尾的字符串。“ – platypus

+0

@platypus我的意思是我说的方式。但我认为,因为它不是一个真正与字符串相关的术语,所以并不是真正的答案。 – tay10r

+0

您的第一句与您的句子相矛盾“但是,如果一个字符串被称为二进制安全,我会怀疑它意味着它是一个以null结尾的字符串......” – platypus