揭秘redis二進位制安全

2021-10-05 04:35:31 字數 793 閱讀 3832

最近在看redis設計與實現,書中有一節是介紹「二進位制安全」,剛剛看到這五個字,我是百思不得其解,經過了好長一段時間的研究才明白了「二進位制安全」在redis中是什麼意思。馬上揭秘

一:先說一下,為什麼會提到這個概念。

這是因為c語言中的字串,存在乙個缺陷,如果字串中包含空字元,那麼程式在讀取字串的時候,會將空字元後面的字元忽略掉。這樣讀出來的字串就不是原有的字串了。

二:redis是如何解決這個問題的呢?

在redis中定義了一種字串,叫簡單動態字串(sds)。sds的 api會以安全的方式讀取字串,即使這個字串中存在空字元,也會將這個字串完整的讀取出來。

redis之所以能讀取整個字串,是由sds的結構決定的,sds本身會儲存字串的長度,這樣api在讀取字串的時候,就會根據這個長度去讀取,從而不會丟掉空字元後面的字元了。如下是sds的結構:

sdshdr

三:二進位制安全的答案來了:

二進位制安全指的就是資料在寫入是什麼樣,那麼讀取就是什麼樣。

當我最開始看到「二進位制安全」這個概念的時候,我的關注點是什麼叫「二進位制安全」,其實這個關注點是不對的,關注點應該放到「安全」這兩個字上。因為無論是c語言還是redis,字串在記憶體的儲存都是二進位制的,這點是沒有區別的。所以 區別點是「安全」,為什麼c語言字串不安全,而redis中的字串是安全的?我上面寫的內容就回到了這個問題。

這是我個人的看法,**說的不對,請指正,謝謝。

二進位制安全

二進位制安全 舉個例子,如果有一種使用空字元來分割多個單詞的特殊資料格式,如圖2 17所示,那麼這種格式就不能使用c字串來儲存,因為c字串所用的函式只會識別出其中的 redis 而忽略之後的 cluster 雖然資料庫一般用於儲存文字資料,但使用資料庫來儲存二進位制資料的場景也不少見,因此,為了確保...

二進位制安全

1 二進位制安全 二進位制安全是指,在傳輸資料時,保證二進位制資料的資訊保安,也就是不被篡改 破譯等,如果被攻擊,能夠及時檢測出來。二進位制安全包含了密碼學的一些東西,比如加解密 簽名等。舉個例子,你把資料11110000加密成10001000,然後傳給我,就是一種二進位制安全的做法。php中二進位...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...