redis 源代码之数据结构(1)--链表的实现
来源:互联网 发布:公众号 回复 php 代码 编辑:程序博客网 时间:2024/05/18 16:56
Redis(Remote Dictionary Server)是一种内存Key/Value数据库。所有的Key/Value都是存放在内存中,如果内存不足,会将一些value swap到硬盘,但是Key始终都在内存中。Redis类似于Memcached。但是redis比memcached有更丰富的数据结构,还可以支持备份,数据持久化(snapshot和aof)。
具体的二者区别可以参考http://blog.csdn.net/gpcuster/article/details/5956555 。
下图是一张是从网上获取的关于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的copyvoid (*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 源代码之数据结构(1)--链表的实现
- redis 源代码之数据结构(sds,链表的实现)
- redis 源代码之数据结构(3)--hash表实现
- redis 源代码之数据结构(2)--sds实现
- redis 源代码之数据结构(4)--zipmap实现
- redis 源代码之数据结构(5)--ziplist实现
- Redis数据结构之链表
- Redis 链表的数据结构
- Redis底层数据结构之链表
- Redis内部数据结构的实现
- Redis的数据结构之List
- Redis的数据结构之Set
- 数据结构之双向链表的实现
- 数据结构之链表的Java实现
- 数据结构之栈的链表实现
- 数据结构之队列的链表实现
- Java数据结构之链表的实现
- 数据结构 之 链表实现的树
- C语言调用mysql函数
- Codeforces Problemset 23D(#23 div.1 D)
- Tab切换5种方法
- GridView添加网格线
- POJ 1502 MPI Maelstrom(floyd)#by zh
- redis 源代码之数据结构(1)--链表的实现
- 杂谈--初到阜新。
- dojo.io.iframe VS dojo.request.iframe VS dojo form(Explorer Save As Prompt)
- Spring框架之Filter应用
- 用Java集合中的Collections.sort方法对list排序的两种方法
- web学习—javascript学习—函数(三)
- JS图片无缝滚动(方便使用)
- win7,ubuntu12.04亲测修复grub引导总结,步骤少,简单
- poj1325