Redis字串二進位制安全的含義

2021-08-14 15:29:15 字數 859 閱讀 8618

在 c 語言中,字串可以用乙個\0結尾的char陣列來表示。

比如說,hello world在 c 語言中就可以表示為"hello world\0"

而redis除了要處理c語言字串之外,還需要處理redis的伺服器協議等等。所以,redis實現的sds(簡單動態字串),是二進位制安全的。

資料結構的定義如下:

typedef

char *sds;

struct sdshdr ;

從上面的資料結構定義,可以看出,redis的sds和c語言的區別就是,sds是通過buf以及len來判斷字串內容的,而不是通過"\0"來判斷。

判斷字串"1234\0123"的長度,看下面**:

//c語言

str="1234\0123";

strlen(str)=4

//redis

127.0

.0.1:6379> set str 1234\0123

ok127.0

.0.1:6379> strlen str

(integer) 9

所以,簡單來說,二進位制安全就是,字串不是根據某種特殊的標誌來解析的,無論輸入是什麼,總能保證輸出是處理的原始輸入而不是根據某種特殊格式來處理。

比如這邊redis通過strlen來表示字串長度,不會因為中間插入了"\0"就返回錯誤結果。

再舉個非二進位制安全的例子:

main()

揭秘redis二進位制安全

最近在看redis設計與實現,書中有一節是介紹 二進位制安全 剛剛看到這五個字,我是百思不得其解,經過了好長一段時間的研究才明白了 二進位制安全 在redis中是什麼意思。馬上揭秘 一 先說一下,為什麼會提到這個概念。這是因為c語言中的字串,存在乙個缺陷,如果字串中包含空字元,那麼程式在讀取字串的時...

計算二進位制字串

4646598ce4f12f0f484da18acbd83813.png en resource database 11364 1 1226f6e4e21ed6df41356aa6e9e857c0.png en resource database 11366 1 遇到難度較大的題目的解題步驟 1.找...

計算二進位制字串

題目描述 給定乙個字串 s,計算具有相同數量0和1的非空 連續 子字串的數量,並且這些子字串中的所有0和所有1都是組合在一起的。重複出現的子串要計算它們出現的次數。示例 1 輸入 00110011 輸出 6 解釋 有6個子串具有相同數量的連續1和0 0011 01 1100 10 0011 和 01...