redis
文章平均质量分 76
lazybin
这个作者很懒,什么都没留下…
展开
-
redis 源代码之数据结构(1)--链表的实现
Redis(Remote Dictionary Server)是一种内存Key/Value数据库。所有的Key/Value都是存放在内存中,如果内存不足,会将一些value swap到硬盘,但是Key始终都在内存中。Redis类似于Memcached。但是redis比memcached有更丰富的数据结构,还可以支持备份,数据持久化(snapshot和aof)。具体的二者区别可以参考http:/原创 2012-11-18 23:42:43 · 1230 阅读 · 1 评论 -
redis 源代码之数据结构(3)--hash表实现
hash表应用范围很广,实现一个hash表有两个重要因素。1,hash函数的选择,很多研究人员都给出了性能卓越的函数;2解决冲突,最常见的是链表的方法,还有开放定址法等方法。redis的hash表(在dict.c dict.h中)用的hash函数是Thomas Wang's 32 bit Mix Function 和MurmurHash2,整个hash实现相当精致而且它最大的特色在于可以实现自动扩原创 2013-01-02 18:41:37 · 1471 阅读 · 0 评论 -
redis 源代码之数据结构(4)--zipmap实现
redis对于内存的使用精确到了bit了,redis引入了zipmap数据结构,可以在hash表的元素比较少的时候,使用zipmap来节约内存。下面就分析一下zipmap的源代码(zipmap.c)作者在源文件开头讲述了zipmap的数据格式,假定有这么个映射关系“foo”=>"bar", "hello"=>"world",则内存布局为"foo""bar""hello""world"原创 2013-01-03 23:24:28 · 1217 阅读 · 0 评论 -
redis 源代码之数据结构(2)--sds实现
1,sds(simple dynamic string)作为redis作者自己实现的字符串类型,是redis的基本数据类型。typedef char *sds;struct sdshdr { int len; int free; char buf[];};可以看到 sds本质上是一个char指针,内部存储结构为一个header+char*. len表示原创 2012-12-20 13:49:38 · 835 阅读 · 0 评论 -
redis 源代码之数据结构(5)--ziplist实现
上一篇分析了zipmap的源代码,zipmap在redis中比较鸡肋,实际上,在2.6版本中,并没有使用zipmap数据结构,zipmap可以用ziplist来进行替代。ziplist用字符串实现了双链表,非常节约内存,既可以存储字符串,也可以存储整型。对ziplist两端进行pop和push操作可以在O(1)时间内完成。但是,每次对ziplist的操作,可能会需要对list进行realloc,所原创 2013-01-13 14:30:13 · 1043 阅读 · 0 评论