linkedlist
- 結構
typedef struct listNode {
struct listNode *prev; // 前置節點
struct listNode *next; // 後置節點
void *value; // 節點值,指向 robj 對象,而 robj 對象中的 ptr 指向實際的 SDS 對象
} listNode;
typedef struct list {
listNode *head; // 表頭節點
listNode *tail; // 表尾節點
void *(*dup)(void *ptr); // 節點值複製函數
void (*free)(void *ptr); // 節點值釋放函數
int (*match)(void *ptr, void *key); // 節點值對比函數
unsigned long len; // 鏈表所包含的節點數量
} list;
- 每個鏈表節點由一個 listNode 結構來表示,每個節點都有一個指向前置節點和後置節點的指針( Redis 的鏈表實現是雙向鏈表)
- 每個鏈表使用一個 list 結構表示,這個結構帶有表頭節點指針、表尾節點指針以及鏈表長度信息( 獲取鏈表長度的時間複雜度爲 O(1) )
- linkedlist 在插入、刪除元素時,元素數量、單個元素的長度對耗時影響小(耗時分佈比較集中),但是空間利用率比較差,特別是數據規模較小時,空間利用率非常差