2、Redis中的鏈表
阿新 • • 發佈:2018-09-26
null long tail 數量 順序 範圍 style 節點 left 鏈表提供高效的節點重排能力,以及順序性的節點訪問方式,並且可以通過增刪節點來靈活的調整鏈表的長度。
1、Redis構建了自己的鏈表,
鏈表節點的結構(adlist.h/listNode):
typedef struct listNode{
//前置節點
struct listNode *pre;
//後置節點
struct listNode *next;
//節點的值
void *value;
}
鏈表結構(adlist.h/list):
typedef struct list{
//表頭節點
listNode *head;
//表尾節點
listNode *tail;
//鏈表所包含的節點數量
unsigned long len;
//節點值復制函數
void *(*dup)(void *ptr);
//節點值釋放函數
void (*free)(void *ptr);
//節點值對比函數
int (*match)(void *ptr,void *key);
}
2、Redis鏈表特定:
雙端:鏈表中每個鏈表節點包含前後指針,獲得的前後節點的復雜度為O(1)
無環:表頭head的前指針與表尾tail後指針指向為null,鏈表的訪問以null為終點
帶頭和尾指針:通過list訪問head指針和tail指針,訪問鏈表頭和尾的復雜度為O(1)
帶鏈表長度計數器:通過訪問list的len屬性來獲得list的長度,復雜度為O(1)
多態:鏈表節點使用void*指針來保存節點值,並且通過list結構的dup、free、match三個屬性為節點值設置類型特定函數,所以鏈表可以用於保存各種不同類型的值。
3、鏈表用於範圍
用於實現Redis的列表鍵、發布與訂閱、慢查詢、監控器等
2、Redis中的鏈表