redis鏈表結(jié)構(gòu)

鏈表提供了高效的節(jié)點重排能力,以及順序性的節(jié)點訪問方式,并且可以通過增刪節(jié)點來靈魂的調(diào)整鏈表長度。

鏈表和鏈表節(jié)點的實現(xiàn)

節(jié)點:

typedef struct listNode{
//前置節(jié)點
struct listNode *prev;
//后置節(jié)點
struct listNode *next;
//節(jié)點的值
void *value;
}listNode;

鏈表的list:

typedef struct list {
//表頭節(jié)點
listNode *head;
//表尾節(jié)點
listNode *tail;
//鏈表所包含的節(jié)點數(shù)量
unsigned long len;
//節(jié)點值賦值函數(shù)
void *(*dup) (void *ptr);
//節(jié)點值釋放函數(shù)
void (*free) (void *ptr);
//節(jié)點值對比函數(shù)
int (*match)(void *ptr,void *key);
}

list結(jié)構(gòu)為鏈表提供了表頭指針head,表尾指針tail,以及鏈表長度計數(shù)器len。
dup函數(shù):用于賦值鏈表節(jié)點所保存的值。
free函數(shù):用于釋放鏈表節(jié)點所保存的值。
match:用于對比鏈表節(jié)點所保存的值和另一個輸入的值是否相等。

redis鏈表實現(xiàn)的特性:
雙端:鏈表節(jié)點帶有prev和next指針,獲取某個節(jié)點的前置節(jié)點和后置節(jié)點的復雜度都是O(1);
無環(huán):表頭節(jié)點的prev指針和表尾節(jié)點的next指針都指向NULL,對鏈表的訪問以NULL為終點。
帶表頭指針和表尾指針:通過list結(jié)構(gòu)的head指針和tail指針,程序獲取鏈表的表頭節(jié)點和表尾節(jié)點的復雜度為O(1)。
帶鏈表長度計數(shù)器:程序使用list結(jié)構(gòu)的len屬性來對list持有的鏈表節(jié)點進行計數(shù),程序獲取鏈表中節(jié)點數(shù)量復雜度

總結(jié)

鏈表被廣泛用于實現(xiàn)redis的各種功能,比如列表建、發(fā)布與訂閱、慢查詢、監(jiān)視器等
每個鏈表界都由一個listNode結(jié)構(gòu)來表示,這個結(jié)構(gòu)帶有表頭指針、表尾節(jié)點指針,鏈表長度等信息。
因為鏈表表頭節(jié)點的前置節(jié)點和表尾節(jié)點的后置節(jié)點都指向null,所以redis的鏈表實現(xiàn)是無環(huán)鏈表。
通過為鏈表設置不同的類型特定函數(shù),redis的鏈表可以用于保存各種不同類型的值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • redis使用兩種數(shù)據(jù)結(jié)構(gòu)保存鏈表,分別是ziplist與linkedlist,內(nèi)存占用及常用操作效率各不相同。本...
    但莫閱讀 1,244評論 0 1
  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關系,并對這種結(jié)構(gòu)定義相應的運算,而且確保經(jīng)過這...
    Winterfell_Z閱讀 6,606評論 0 13
  • 置換貼圖需要的節(jié)點VertexNormals 修改參數(shù),細分,防止破面
    一言的世界閱讀 162評論 0 0
  • 這周終于將列入書單很久的《小狗錢錢》看完了。 這本書印象最深的還是錢錢對吉婭的忠告“不能試驗,只有兩個選擇——做或...
    smallfen閱讀 334評論 0 3
  • 今夜無眠 有誰可以暢談 在無聊的時候竟不知可以和誰聊天 一個人時寂寞 在人海之中還是那么孤單 是我背離了世界 還是...
    千夢冰雁閱讀 271評論 2 1

友情鏈接更多精彩內(nèi)容