redis 源代码之数据结构(1)--链表的实现
2012-11-18 23:42
411 查看
Redis(Remote Dictionary Server)是一种内存Key/Value数据库。所有的Key/Value都是存放在内存中,如果内存不足,会将一些value swap到硬盘,但是Key始终都在内存中。Redis类似于Memcached。但是redis比memcached有更丰富的数据结构,还可以支持备份,数据持久化(snapshot和aof)。
具体的二者区别可以参考/article/2548174.html 。
下图是一张是从网上获取的关于redis内部的存储结构(不知道原作者是谁了)。
最近在阅读redis源代码,决定将自己的一些理解记下来,用于备份和检查。无奈技术水平很挫,如果有错误,还希望指正。代码版本是2.6.2,代码量比2.4.17大了很多。==!
list *listInsertNode(list *list, listNode *old_node, void *value, int after) ;//根据after是否为0来决定是在old_node节点之前(after == 0)还是之后(after != 0)
listNode *listIndex(list *list, long index);//返回链表中下标为index的节点,0为head节点,1为head->next节点,以此类推。若index为负数,则从后向前,-1为tail节点,-2为
tail->prev 节点以此类推。
list 数据结构不是太难理解~ 下文将会分析sds数据结构(作者自定义的字符串)
具体的二者区别可以参考/article/2548174.html 。
下图是一张是从网上获取的关于redis内部的存储结构(不知道原作者是谁了)。
最近在阅读redis源代码,决定将自己的一些理解记下来,用于备份和检查。无奈技术水平很挫,如果有错误,还希望指正。代码版本是2.6.2,代码量比2.4.17大了很多。==!
adlist.h 定义了一个双链表结构。 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); //用于节点value的copy void (*free)(void *ptr); //用于节点value的释放 int (*match)(void *ptr, void *key); //节点value的比较 unsigned long len; //链表的长度 } list;adlist 提供的链表操作都是很常见的,节点value的内存分配和释放由用户负责。
list *listInsertNode(list *list, listNode *old_node, void *value, int after) ;//根据after是否为0来决定是在old_node节点之前(after == 0)还是之后(after != 0)
listNode *listIndex(list *list, long index);//返回链表中下标为index的节点,0为head节点,1为head->next节点,以此类推。若index为负数,则从后向前,-1为tail节点,-2为
tail->prev 节点以此类推。
list 数据结构不是太难理解~ 下文将会分析sds数据结构(作者自定义的字符串)
相关文章推荐
- redis 源代码之数据结构(sds,链表的实现)
- redis 源代码之数据结构(4)--zipmap实现
- redis 源代码之数据结构(2)--sds实现
- redis 源代码之数据结构(5)--ziplist实现
- redis 源代码之数据结构(3)--hash表实现
- 数据结构基础(11) --循环链表的设计与实现
- 数据结构之链表实现简单的信息系统
- 数据结构基础(10) --单链表迭代器的设计与实现
- 数据结构之链表-链表实现及常用操作(C++篇)
- 【数据结构与算法】链表1:单向链表(Java实现)
- 数据结构之链表各功能的实现
- (4)数据结构——栈(链表)实现
- 数据结构1 -- 链表的基本方法实现
- 数据结构(Data structure):用链表实现多项式的表示和运算(C语言)
- 数据结构之链表Java实现
- 数据结构--链表的实现
- 数据结构 学习笔记之:静态链表--史上最简单的C语言实现——只为掌握概念——不清楚静态链表的鸟鸟们有福了!
- 数据结构实验1---约瑟夫环(“链表”实现)
- python——python 数据结构之双向链表的实现
- 数据结构——链表表的实现