随笔分类 - redis源码分析
redis源码分析
摘要:sds是redis中用来处理字符串的数据结构。sds的定义在sds.h中:1 typedef char *sds;简洁明了!简明扼要!(X,玩我呢是吧!这特么不就是c中的字符串么?!)。像redis这种高端大气上档次的服务器显然不会这么的幼稚。在sds的定义之后,还有一个结构体:1 struct sdshdr {2 int len;3 int free;4 char buf[];5 }有len,有free,这就有点意思了。很明显,根据这个结构体的定义,这是sds的header,用来存储sds的信息。注意最后的buf定义,这个buf数组没有设置长度。这是为神马呢?在gcc...
阅读全文
摘要:redis的哈希字典和其他字典的功能一样,用于根据key值快速的查找对应的value(这不废话么。。。)。redis的哈希字典使用的是哈希的方法(依旧是废话)。redis的字典有一种独特的rehash的方法,这是本文介绍的重点。 首先,dict包含四个结构体。关系如图所示: 结构体dict表示一个字典。每个字典中含有两个哈希表,ht[0]和ht[1]。哈希表用结构体dictht表示。哈希表采用链表法来处理冲突。结构体dictht的成员变量size表示table的长度,通常是2的幂次。sizemask等于size减1,用于计算哈希值对应的桶。used表示table的所有桶中的dictEntry实
阅读全文
摘要:神马是redis?redis是一个开源的,牛B的键值数据库。由于键可以被保存为字符串,列表,哈希表,集合和有序集合,redis有时候也被称作数据结构服务器。这句蹩脚的翻译来自redis官网的介绍。想进一步了解的可以去它官网瞅瞅。目前redis已归入vmware门下。 下面,切入正题。redis是用c编写的。用c编写的程序都要面临一个很重要也很头疼的问题----内存管理。很多时候,不当的内存管理会成为万恶之源。。。redis的内存管理只有两个文件zmalloc.c和zmalloc.h。 zmalloc.h的内容如下: 1 void *zmalloc(size_t size); 2 void *z
阅读全文