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?
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?
二进制安全字符串解析器会考虑字符串0 - 255
中单个字符中的所有可能值,该字符串可能不是以空值结尾的(否则它的长度是已知的)。如果字符串解析器不是二进制安全的,则它需要一个以空字符结尾的字符串(字符串中的二进制文件0
)。
通常,字符串解析器不是二进制安全的。许多解析期望正常的可打印字符和0
字符串末尾的 a。0
如果这种字符串的末尾没有 a ,则很容易出现分段错误。
二进制安全解析器可能正在解析任意数据(可能是文本或其他内容)。
编辑:
“字符串/文件是二进制安全的意味着什么?”
“为什么redis中的状态回复不能是二进制安全的?”
\r\n
. 这就是解析器计算字符串长度的方式。因此,如果它\r\n
在回复结束之前找到 a ,它将停止解析并忽略之后的所有内容。除非状态回复需要发送二进制数据,否则它们不需要是二进制安全的。