1. 程式人生 > >redis_簡單動態字符串

redis_簡單動態字符串

時間復雜度 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_簡單動態字符串