二進制安全是指,在傳輸數據時,保證二進制數據的信息安全,也就是不被篡改、破譯等,若是被攻擊,可以及時檢測出來。
二進制安全包含了密碼學的一些東西,好比加解密、簽名等。
舉個例子,你把數據11110000加密成10001000,而後傳給我,就是一種二進制安全的作法。
redis中的二進制安全:
二進制安全
C字符串中的字符必須符合某種編碼(好比ASCII),而且除了字符串的末尾以外,字符串裏面不能包含空字符,不然最早被程序讀入的空字符將被誤認爲是字符串結尾,這些限制使得C字符串只能保存文本數據,而不能保存像圖片、音頻、視頻、壓縮文件這樣的二進制數據。redis
舉個例子,若是有一種使用空字符來分割多個單詞的特殊數據格式,如圖2-17所示,那麼這種格式就不能使用C字符串來保存,由於C字符串所用的函數只會識別出其中的"Redis",而忽略以後的"Cluster"。數據庫
雖然數據庫通常用於保存文本數據,但使用數據庫來保存二進制數據的場景也很多見,所以,爲了確保Redis能夠適用於各類不一樣的使用場景,SDS的 API都是二進制安全的(binary-safe),全部SDS API都會以處理二進制的方式來處理SDS存放在buf數組裏的數據,程序不會對其中的數據作任何限制、過濾、或者假設,數據在寫入時是什麼樣的,它被讀 取時就是什麼樣。數組
這也是咱們將SDS的buf屬性稱爲字節數組的緣由——Redis不是用這個數組來保存字符,而是用它來保存一系列二進制數據。安全
例如,使用SDS來保存以前提到的特殊數據格式就沒有任何問題,由於SDS使用len屬性的值而不是空字符來判斷字符串是否結束,如圖2-18所示。函數
經過使用二進制安全的SDS,而不是C字符串,使得Redis不只能夠保存文本數據,還能夠保存任意格式的二進制數據。
編碼