主要的資料結構是: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...