簡單動態字串

2021-09-20 21:11:31 字數 654 閱讀 5117

主要的資料結構是:sds(動態字串) 雙端鍊錶 字典 壓縮字典 整數集合 跳躍表

set msg 「hello world」

鍵值對的鍵是乙個字串物件,物件底層的實現是乙個儲存著字串「msg」的sds

鍵值對的值是乙個字串物件,底層實現也是sds

所以說sds(動態字串)是其他物件實現的基礎。

每個sds.h/sdshdr結構都表示乙個sds值

struct sdshdr{

//用來記錄buf陣列中已經使用的位元組數目

//等於sds所儲存字串的長度,但是並不包括\0

int len;

//buf陣列中還剩餘多少空間的位元組沒有使用

int free;

char buf[len+free+1];

q:為什麼要在字串末尾加上\0

a:因為sds的字串可以直接呼叫c庫函式,無需自己繼續編寫

sds與c語言中char區別

常數級別複雜度獲取字串長度(len)

杜絕緩衝池溢位(每一次拼接的時候,都會先檢視是否會溢位,如果會溢位的話,先動態擴充套件,不然為啥叫動態字串)

記憶體分配演算法:空間預分配  惰性空間釋放

因為redis追求時間的優化,所以直接用free記錄為使用的位元組大小 不直接釋放  避免下次記憶體分配

簡單動態字串 SDS

sds dynamic string,簡單動態字串 是 redis 底層所使用的字串表示。sds 在 redis 中的主要作用有以下兩個 實現字串物件 stringobject 在 redis 程式內部用作char 型別的替代品 redis 是乙個鍵值對資料庫 key value db 資料庫的值可...

Redis 簡單動態字串

在c語言中,乙個結構體中最後乙個成員的位址減去第乙個成員的位址,就是該結構體的大小 例如 struct sdshdr buf的位址減去len的位址,正好等於sizeof sdshdr 在c 中 char str nihao 是不被允許的,但是c語言中可以,並且可以直接列印str 輸出nihao,和c...

簡單動態字串 SDS

1 介紹 redis沒有使用c語言本身的字串,而使用簡單動態字串sds dynamic string 這種抽象型別。2 實現 struct3 為什麼要使用sds?為什麼不適用c語言本身的字串?如何擴容?因為c語言本身的字串進行length計算的時候複雜度為o n sds本身具有len屬性,使用sds...