2

In the Redis Protocol specification, it mentions that:

"Status replies are not binary safe and can't include newlines." What does it mean for a string/file to be binary safe? And why can't status replies in redis be binary safe?

4

1 回答 1

3

二进制安全字符串解析器会考虑字符串0 - 255中单个字符中的所有可能值,该字符串可能不是以空值结尾的(否则它的长度是已知的)。如果字符串解析器不是二进制安全的,则它需要一个以空字符结尾的字符串(字符串中的二进制文件0)。

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

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

编辑:

“字符串/文件是二进制安全的意味着什么?”

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

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

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

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

于 2013-07-17T21:21:32.387 回答