redis原始碼分析 adlist

2021-07-28 03:52:08 字數 1470 閱讀 2406

typedef struct listnode  listnode;
首先定義了乙個節點,包含前驅和後繼以及對應的value

typedef struct listiter  listiter;
list的迭代器,next指標和迭代方向

typedef struct list  list;
鍊錶內容 head和tail指標分別指向收尾,另外三個函式指標代表在拷貝,刪除,對比的時候,如果有函式可呼叫就呼叫當前次函式的邏輯,不然就呼叫自身的邏輯

/* create a new list. the created list can be freed with

* alfreelist(), but private value of every node need to be freed

* by the user before to call alfreelist().

* * on error, null is returned. otherwise the pointer to the new list. */

list *listcreate(void)

/* free the whole list.

* * this function can't fail. */

void listrelease(list *list)

zfree(list);

}

建立和刪除鍊錶沒什麼說的

/* add a new node to the list, to head, containing the specified 'value'

* pointer as value.

* * on error, null is returned and no operation is performed (i.e. the

* list remains unaltered).

* on success the 'list' pointer you pass to the function is returned. */

list *listaddnodehead(list *list, void *value)

else

list->len++;

return list;

}

在頭和尾部add道理一致

list *listinsertnode(list *list, listnode *old_node, void *value, int after) 

} else

}if (node->prev != null)

if (node->next != null)

list->len++;

return list;

}

Redis原始碼分析 intset h c

intset.h c 是redis 的整數set實現,intset的結構體如下 基本結構 typedef struct intset intset intset的第乙個成員encoding,表明contents中的儲存資料的資料長度,可以是16bits,32bits,64bits。第二個成員leng...

Redis原始碼分析系列

redis目前熱門nosql記憶體資料庫,量不是很大,本系列是本人閱讀redis原始碼時記錄的筆記,由於時間倉促和水平有限,文中難免會有錯誤之處,歡迎讀者指出,共同學習進步,本文使用的redis版本是2.8.19。redis之hash資料結構 redis之intset資料結構 redis之skipl...

Redis原始碼分析(adlist)

原始碼版本 redis 4.0.1 原始碼位置 redis中的鍊錶叫adlist a generic doubly linked list implementation 乙個通用的雙端鍊錶實現 和普通單鏈表相比,它的方向可以向前或者向後,這是由於資料結構中定義了next和prev兩個指標決定的,下面...