2013-07-17 69 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