Redis3.2版本前的数据结构
本质是一个双向链表
最基本的双向链表
附带一个迭代器
3.2版本后使用quicklist代替
相关文件
数据结构
1 | typedef struct listNode { |
主要宏
1 | /* Functions implemented as macros */ |
函数分析
list *listCreate(void);
功能
创建list
源码
1 | /* Create a new list. The created list can be freed with |
void listRelease(list *list);
功能
释放list
源码
1 | /* Free the whole list. |
list *listAddNodeHead(list *list, void *value);
功能
在list头插入元素
源码
1 | /* Add a new node to the list, to head, containing the specified 'value' |
list *listAddNodeTail(list *list, void *value);
功能
在list尾插入元素
源码
1 | /* Add a new node to the list, to tail, containing the specified 'value' |
list *listInsertNode(list *list, listNode *old_node, void *value, int after);
功能
在old_node前/后插入新的数据
源码
1 | list *listInsertNode(list *list, listNode *old_node, void *value, int after) { |
void listDelNode(list *list, listNode *node);
功能
删除元素节点
源码
1 | /* Remove the specified node from the specified list. |
listIter *listGetIterator(list *list, int direction);
功能
创建一个list的迭代器
源码
1 | /* Returns a list iterator 'iter'. After the initialization every |
void listReleaseIterator(listIter *iter);
功能
释放迭代器
源码
1 | /* Release the iterator memory */ |
void listRewind(list *list, listIter *li);
功能
重置迭代器,方向调整为从头到尾
源码
1 | /* Create an iterator in the list private iterator structure */ |
void listRewindTail(list *list, listIter *li);
功能
重置迭代器,方向调整为从尾到头
源码
1 | void listRewindTail(list *list, listIter *li) { |
listNode *listNext(listIter *iter);
功能
迭代,获取下一个元素
源码
1 | /* Return the next element of an iterator. |
list *listDup(list *orig);
功能
复制list
源码
1 | /* Duplicate the whole list. On out of memory NULL is returned. |
listNode *listSearchKey(list *list, void *key);
功能
在list中查找指定key
返回找到的节点
源码
1 | /* Search the list for a node matching a given key. |
listNode *listIndex(list *list, long index);
功能
获取第index位置的元素节点
源码
1 | /* Return the element at the specified zero-based index |
void listRotate(list *list);
功能
旋转list,将结尾节点移动到头部
源码
1 | /* Rotate the list removing the tail node and inserting it to the head. */ |