1. 程式人生 > >2、Redis中的鏈表

2、Redis中的鏈表

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中的鏈表