Redis源码研究--字典】的更多相关文章

计划每天花1小时学习Redis 源码.在博客上做个记录. --------6月18日----------- redis的字典dict主要涉及几个数据结构, dictEntry:具体的k-v链表结点 dictht:哈希表 dict:字典 具体关系为 typedef struct dict { dictType *type; void *privdata; dictht ht[]; int rehashidx; /* rehashing not in progress if rehashidx ==…
---------------------6月23日--------------------------- Redis启动入口即main函数在redis.c文件,伪代码如下: int main(int argc, char **argv) { initServerConfig(); ) { loadServerConfig(configfile,options); } else { redisLog(REDIS_WARNING, ], server.sentinel_mode ? "sentin…
[http://dongxicheng.org/nosql/redis-code-hashtable/] 1. Redis中的哈希表 前面提到Redis是个key/value存储系统,学过数据结构的人都知道,key/value最简单的数据结果就是哈希表(当然,还有其他方式,如B-树,二叉平衡树等),hash表的性能取决于两个因素:hash表的大小和解决冲突的方法.这两个是矛盾的:hash表大,则冲突少,但是用内存过大:而hash表小,则内存使用少,但冲突多,性能低.一个好的hash表会权衡这两个…
------------7月3日------------ /* The redisOp structure defines a Redis Operation, that is an instance of * a command with an argument vector, database ID, propagation target * (REDIS_PROPAGATE_*), and command pointer. * * Currently only used to additi…
-------------6月29日-------------------- 简单看了下跳表这一数据结构,理解起来很真实,效率可以和红黑树相比.我就喜欢这样的. typedef struct zskiplist { struct zskiplistNode *header, *tail; unsigned long length; int level; } zskiplist; 跳表包括头.尾.长度.层数. typedef struct zskiplistNode { robj *obj; do…
之前看的内容,占个位子,以后补上. ------------8月2日------------- 好久没看了,惭愧,今天抽了点时间重新看了Redis的字符串,一边写博客,一边看. Redis的字符串主要在sds.h.sds.c文件中.打开sds.h,发现代码也不多.贴一下 typedef char *sds; struct sdshdr { int len; int free; char buf[]; }; 看到了没,sds其实就是个char* ,刚开始看到这里,觉得好失望,这不是骗国家的钱吗,往…
1. Redis 是什么 Redis是一个开源的使用ANSI C语言编写的基于内存的key/value存储系统,与memcache类似,但它支持的value类型更多,包括:字符串(string).链表(list).集合(set).有序集合(sorted set)和hash tablehttp://blog.nosqlfan.com/html/2235.html等,这些数据类型支持push/pop.add/remove.交集并集差集及其他更丰富的操作,且这些操作均是原子性的. 按照分布式领域的CA…
之前看的内容,占个位子,以后补上. ----------8月4日--------------- 双向链表这部分看的比较爽,代码写的中规中矩,心里窃喜,跟之前学的<数据结构>这本书中差不多. //链表结点 typedef struct listNode { struct listNode *prev; struct listNode *next; void *value; } listNode; //链表头 typedef struct list { listNode *head; listNo…
dict的用途 dict是一种用于保存键值对的抽象数据结构,在redis中使用非常广泛,比如数据库.哈希结构的底层. 当执行下面这个命令: > set msg "hello" 以及使用哈希结构,如: > hset people name "hoohack" 都会使用到dict作为底层数据结构的实现. 结构的定义 先看看字典以及相关数据结构体的定义: 字典 /* 字典结构 每个字典有两个哈希表,实现渐进式哈希时需要用在将旧表rehash到新表 */ typ…
redis中字典相关的文件为:dict.h与dict.c 与其说是一个字典,道不如说是一个哈希表. 一.数据结构 dictEntry typedef struct dictEntry { void *key; union { void *val; uint64_t u64; int64_t s64; double d; } v; struct dictEntry *next; } dictEntry; dictEntry是一个kv对的单向链表,其中v是一个联合体,支持数字,或者是指向一块内存的指…