2024-04-05
原文作者:文先生的博客 原文地址: http://wenfh2020.com/2020/01/21/redis-list/

redis 的链表实现不是很复杂,从 listNode 可以知道,list 是一个双向链表,支持从链表首尾两边开始遍历结点。同时提供了 listIter 迭代器,方便前后方向迭代遍历。其它应该就是链表增删改查的一些常规操作了。


1. 文件

adlist.h, adlist.c

2. 数据结构

2.1. 链表结点

 
    typedef struct listNode {
        struct listNode *prev;
        struct listNode *next;
        void *value;
    } listNode;

2.2. 链表迭代器

 
    typedef struct listIter {
        listNode *next;
        int direction;
    } listIter;

2.3. 链表

 
    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;
阅读全文