這是我參與更文挑戰的第24天,活動詳情查看: 更文挑戰node
Redis
中的經常使用的鏈表數據結構Redis
低版本(3.2以前)中list數據結構底層就是使用鏈表來進行串聯數據的!Redis
中在操做List數據結構時的結構圖!在redis
中並非僅僅使用這一種雙向的鏈表結構.關於ziplist等其餘結構咱們這裏暫時不討論。typedef struct listNode {
struct listNode *prev;
struct listNode *next;
void *value;
} listNode;
typedef struct listIter {
listNode *next;
int direction;
} listIter;
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;
複製代碼
函數 | 做用 |
---|---|
dup | 複製鏈表節點值 |
free | 釋放鏈表節點值 |
match | 比對鏈表節點值與指定值是否想的相等 |
位置 | 做用 |
---|---|
zlbytes | ziplist字節長度;長度最長爲(2^32)-1 |
zltail | 整個ziplist偏移量;四個字節 |
zllen | ziplist中存儲的元素個數;兩個字節 |
entryX | ziplist中元素 |
zlend | 結束位 。固定值0xFF=255 |
typedef struct zlentry {
unsigned int prevrawlensize, prevrawlen;
unsigned int lensize, len;
unsigned int headersize;
unsigned char encoding;
unsigned char *p;
} zlentry;
複製代碼
歡迎點個讚唄redis