我讀Redis的宣言[1],它似乎Redis的只接受二進制安全的字符串作爲密鑰,但我不知道這兩者之間的區別。誰能解釋一個例子?二進制安全字符串和二進制不安全字符串有什麼區別?
[1] http://oldblog.antirez.com/post/redis-manifesto.html
我讀Redis的宣言[1],它似乎Redis的只接受二進制安全的字符串作爲密鑰,但我不知道這兩者之間的區別。誰能解釋一個例子?二進制安全字符串和二進制不安全字符串有什麼區別?
[1] http://oldblog.antirez.com/post/redis-manifesto.html
我不熟悉的系統問題,但「二進制安全的字符串」可能要麼用來形容某些字符串存儲類型或描述特定字符串實例。在一個二進制安全字符串類型,長度爲N的字符串可被用於封裝在N的值的任何序列0-255或0-65535(對於8位或16位的類型,分別地)。一個二進制安全的字符串實例可能是一個可以將其表示細分爲大小一致的塊的實例,每個塊代表一個字符,與不同字符需要不同數量存儲空間的字符串實例不同。
一些字符串類型(不是二進制安全的)將使用可變長度表達對某些字符,將行爲古怪,如果要求在例如採取行動一個字符串,其中包含「多部分字符的前半部分」的代碼,後跟除「多部分字符的後半部分」之外的字符。此外,一些與字符串一起工作的代碼將假定它的第N個字符將被存儲在第N字節或第N對字節中,並且如果給定一個字符串第8個字符存儲在第12和第13對字節中。
我只想簡單地看一下提供的鏈接,我猜想這就是說redis
不希望只適用於使用不同字節數來存放不同字符的字符串,儘管我不太清楚它是否假設一個字符串類型將能夠處理任何可能的字節序列,或者它是否假設它給出的任何字符串實例可以被安全地視爲一個字節序列。然而,我認爲感興趣的基本概念是:(1)一些字符串類型使用可變長度編碼,而其他字符串則不使用; (2)即使在使用可變長度編碼的類型中,字符串實例的有用子集也只包含固定長度字符。
根據Redis documentation,簡單的Redis字符串的語法爲"+redis_response\r\n"
,而批量Redis字符串的語法爲"$str_len\r\nbinary_safe_string\r\n"
。 換句話說,在Redis的二進制安全字符串可以包含簡單的"foo"
以高達512MB
任何二進制數據的數據說JEPG圖像。二進制安全的串有其長度在它編碼並不與任何特定的字符終止如在C
一個NULL
終止字符串與'\0
結束。
HTH, Swanand