這篇文章帶大家了解一下Redis 資料結構中的雙鍊錶,簡單介紹一下雙鍊錶的運用,希望對大家有幫助!
在Redis 資料類型中的列表list,對資料的新增和刪除常用的指令有lpush,rpush,lpop,rpop,其中l表示在左側,r 表示在右側,可以在左右兩側做新增和刪除操作,說明這是一個雙向的資料結構,而list 資料結構正是雙向鍊錶,類似java 中的LinekdList 鍊錶列表。 【相關推薦:Redis影片教學】
鍊錶提供了高效的節點重排能力,以及順序的節點存取方式,透過修改節點的pre 和next 指標來修改鍊錶的數據。
C 語言沒有內建鍊錶的資料結構,所以 Redis 建構了自己的鍊錶結構。
鍊錶是由鍊錶以及鍊錶節點組成,每個鍊錶節點使用一個adlist.h/listNode 結構來表示:
typedef struct listNode { //前置节点 struct listNode *prev; //后置节点 struct listNode *next; // 节点值 void *value; } listNode;
多個listNode 可以透過prev 和next 指標組成雙鍊錶的,如題所示:
多個listNode 可以組成鍊錶,但為了方便管理,使用adlist.h/list 管理鍊錶,list 結構如下:
typedef struct list { // 列表头结点 listNode *head; // 列表尾结构 listNode *tail; // 节点值复制函数 void *(*dup)(void *ptr); // 节点值释放函数 void (*free)(void *ptr); // 节点值对比函数 int (*match)(void *ptr, void *key); // 列表节点数量 unsigned long len; } list;
list 結構為鍊錶提供了表頭指標head、表尾指標tail,以及節點數計算len 。下圖展示一個由list 結構和三個listNode 節點組成的鍊錶:
#Redis 鍊錶實作的特徵有如下的總結:
列表鍵,發布訂閱、慢查詢以及監視器等。
更多程式相關知識,請造訪:程式設計入門! !
以上是深入聊聊Redis中的雙鍊錶的詳細內容。更多資訊請關注PHP中文網其他相關文章!