鏈表提供了高效的節點重排能力,以及順序性的節點訪問方式,并且可以通過增刪節點來靈活地調整鏈表的長度,
redis中鏈表應用廣泛,如list中就使用了鏈表,
每一個鏈表節點使用listNode結構標識(雙向鏈表):
typedef struct listNode{ //前置節點 struct listNode *prev; //后置節點 struct listNode *next; //節點值 void *value; }
鏈表大家都熟悉不做過多說明,再看下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);//節點值對比函式 }
Redis 鏈表實作的特點:
1、雙向鏈表,獲取前置后置節點的時間復雜度都是O(1);
2、無環,對鏈表的訪問以NULL為終點,
3、帶有表頭表尾指標,程式獲取鏈表的表頭節點和表尾節點的復雜度為O(1);
4、帶鏈表長度計數器,程式獲取鏈表中節點數量的復雜度為O(1);
5、多型,鏈表節點使用 void* 指標保存節點值,并可以通過list結構的dup、free、match 三個屬性為節點值設定型別特定函式,所以鏈表可以用于保存各種不型別的值,同
t說明:尊重作者知識產權,文中內容參考《Redis設計與實作》,僅在此做學習與大家分享,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/4610.html
標籤:NoSQL
上一篇:MongoDB最佳安全實踐
下一篇:Redis學習筆記(三) 字典
