redis_簡單動態字符串
阿新 • • 發佈:2018-06-04
時間復雜度 sds span mic truct hdr struct 復雜度 時間
在redis中,C字符串(以‘\0‘結尾的字符數組)只用在一些無需對字符串值進行修改的地方,比如打印日誌。其他情況,redis使用SDS - SimpleDynamicString 簡單動態字符串,來做。
比如
127.0.0.1:6379> set testKey "testValue" OK
鍵,是一個字符串對象,底層是一個保存著字符串"testKey"的SDS
值也是一個字符串對象,底層是一個保存著字符串"testValue"的SDS
SDS 定義
struct sdshdr { // 記錄buf數組中已使用的字節數,等同於字符串長度(不包括結尾的\0)int len; // 記錄buf數組中未使用的字節數 int free; // 實際保存字符串的字節數組 char buf[]; }
比如一個字符串"test":
len = 4
free = 0(這個不一定,初始時為0,後續說明)
buf[] = ‘t‘、‘e‘、‘s‘、‘t‘、‘\0‘,註意結尾與C相同,也存在‘\0‘,不記入字符串長度
這樣做的特點與優勢
1. 常數復雜度獲取字符串長度:
- C字符串不記錄長度,只能遍歷,到\0得到長度,時間復雜度O(n),SDS可以直接記錄len為長度,時間復雜度O(1)
2.
3.
4.
5.
6.
redis_簡單動態字符串