Redis底層資料結構 鍊錶

2021-08-31 23:43:10 字數 873 閱讀 4028

這是普通的鍊錶實現, 鍊錶結點不直接持有資料, 而是通過void *指標來間接的指向資料. 其實現位於src/adlist.hsrc/adlist.c中, 關鍵定義如下:

typedef struct listnode  listnode;

typedef struct listiter listiter;

typedef struct list list;

其記憶體布局如下圖所示:

這是乙個平平無奇的鍊錶的實現.list在redis除了作為一些value type的底層實現外, 還廣泛用於redis的其它功能實現中, 作為一種資料結構工具使用. 在list的實現中, 除了基本的鍊錶定義外, 還額外增加了:

迭代器listiter的定義, 與相關介面的實現.

由於list中的鍊錶結點本身並不直接持有資料, 而是通過value字段, 以void *指標的形式間接持有, 所以資料的生命週期並不完全與鍊錶及其結點一致. 這給了list的使用者相當大的靈活性. 比如可以多個結點持有同乙份資料的位址. 但與此同時, 在對鍊錶進行銷毀, 結點複製以及查詢匹配時, 就需要list的使用者將相關的函式指標賦值於list.dup,list.free,list.match欄位.

Redis底層資料結構?

福哥口訣法 簡鏈字跳整 壓快壓 sds synamic string 簡單動態字串。支援自動動態擴容的位元組陣列 list 鍊錶 雙端鍊錶。dict 字典。使用雙雜湊表實現的,支援平滑擴容的字典 zskiplist 跳躍表。附加了後向指標的跳躍表 intset 整數集合。用於儲存整數數值集合的自有結...

Redis底層資料結構

redis底層實現的8種資料結構 sds synamic string 支援自動動態擴容的位元組陣列 list 鍊錶 dict 使用雙雜湊表實現的,支援平滑擴容的字典 zskiplist 附加了後向指標的跳躍表 intset 用於儲存整數數值集合的自有結構 ziplist 一種實現上類似於tlv,但...

redis底層資料結構

1.1 string字串 表現形式為 資料結構 sds 簡單的動態字串 使用原因 redis是使用c語言開發的,但在c語言中是沒有字串型別的,只能使用指標或符陣列的形式表示乙個字串,所以在redis設計了一種簡單的動態字串 可以根據不同的資料型別不同的資料結構選擇不同的資料結構 支援的資料型別 字串...