Redis中的資料結構

2021-10-24 22:42:28 字數 1190 閱讀 9291

struct sdshdr 

;

為啥不使用c語言自帶的char?*

1.常數複雜度獲取字串長度

2.不會緩衝區溢位

3.減少字串修改帶來的記憶體重分配通過未使用的空間字段實現了:

惰性空間釋放:刪除字元時,不會立馬收回空間,而是留給下次使用

4.二進位制安全 c字串以空字串為結尾,所以不能儲存音訊等二進位制檔案,sds不是空格判斷末尾,所以可以存放二進位制資料。

雖然不以』\0』作為分隔,但是還是加上以便使用c語言的庫函式。

typedef struct list  list;
c語言中沒有這種結構,redis自己構建了。

redis的資料庫就是基於字典

murmurhash2 演算法來計算鍵的雜湊值。

使用頭插法

擴充套件為當前size*2的最小2的n次冪

縮小為小於當前size的最小2的n次冪

字典中有兩個ht(hashtable) 另乙個在做擴充套件收縮時會使用到,ht[1]開始為null,需要用到的時候才會分配空間

複製到ht[1]中,完成之後再ht[1]變為ht[0]。

loadfactor = ht[0].used/ht[0].size

擴充套件條件:

收縮條件:

漸進式rehash

rehash期間(dict結構中rehash欄位不為-1時)每次對字典進行新增、刪除、查詢或更新字段時會順帶把ht[0]中的字段rehash到ht[1]中,並將rehash+1。rehash階段先再ht[0]找,找不到再去ht[1]中找。總結

跳躍表

平均o(logn),最壞o(n).

有點二分的感覺。

跳躍表是有序集合的底層實現之一。

有序集合還需要dict結構

typedef struct zskiplist  zskiplist;
還有整數集合等等就不贅述了哈…

redis中的資料結構

string 常用命令 說明get 獲取儲存在給定鍵中的值 set設定儲存在給定鍵中的值,可以是字串 整數或者浮點數 del刪除給定鍵值對,使用與所有資料結構型別 eg bin redis cli 127.0.0.1 6379 set name qi ok127.0.0.1 6379 get nam...

redis內部資料結構的資料結構

redis對外的公眾的資料結構有五種string,list,set,hash,zset 編碼常量 編碼所對應的底層資料結構 redis encoding int long 型別的整數 redis encoding embstr embstr 編碼的簡單動態字串 redis encoding raw ...

Redis 的資料結構

redis是乙個先進的key value鍵值儲存資料庫,通常作為資料結構伺服器。支援strings,hashes,lists,sets,sorted sets,bitmaps 和hyperloglogs redis的字串為sds dynamic string 可以儲存任何東西,最大長度可達515兆。...