Redis的SDS和c語言字符串的區別

SDS是Redis中的動態字符串。

和c語言字符串不同之處在於,多了兩個屬性,len和free。 buf用來記錄數據,當然和c語言一樣一\0結尾。不過,這個\0對於用戶來說是通明的,我們不需要加上去,它自動幫我們加。

那這樣有什麼好處?

1.獲取字符串長度從O(n)降低爲O(1)。這對了追求速度的Redis來說,是很有用的。

2.不會溢出,c語言中   aa\0bb\0   這是兩個字符串,如果我把aa改爲aaa是不是bb字符串就被覆蓋了,但是SDS中有最大長度,就可以避免這個問題。

3.減少內存分配次數

Redis中是Key Value結構,字符串是經常修改的,如果有len、free屬性,那我增加一個字符,free不爲0的情況,就不需要重新分配內存。

4.可以儲存字符串和二進制

c語言是以\0結尾的,如果儲存字符串就會有問題,比如某處被識別爲\0就結尾了。

但是,SDS是以len作爲結尾的。所以不存在這樣的問題。

5.兼容部分C字符串函數

這就解釋了爲什麼SDS最後還有加上\0.   有了這個,我們就可以重用C字符串的函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章