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字符串的函數。