Redis 学习笔记(二)——全局哈希表的数据写入

Redis全局哈希表的数据结构

Redis 学习笔记(二)——全局哈希表的数据写入_第1张图片

server.h文件中定义了 client 结构体,

Redis 学习笔记(二)——全局哈希表的数据写入_第2张图片

其中,redisDb *db 和参数 int dictid 表示当前的redis数据库。

命令的参数是字段 robj *argv,其中 argv[1] 是key,argv[2] 是value;

redisDb也是在server.h 中定义的结构体,

Redis 学习笔记(二)——全局哈希表的数据写入_第3张图片

在redisDb中,定义了全局的哈希表(dict *dict),用于保存所有的key和value

执行命令,插入全局哈希表的流程

以String 的 set命令为例,在server.c 文件中,定义了set命令,

Redis 学习笔记(二)——全局哈希表的数据写入_第4张图片

其中setCommand是具体要执行的函数,定义在server.h文件中:

Redis 学习笔记(二)——全局哈希表的数据写入_第5张图片

setCommand命令的参数就是client 对象,具体执行是在 t_string.c 文件中:

Redis 学习笔记(二)——全局哈希表的数据写入_第6张图片

其中,第一行 c->argv[2] = tryObjectEncoding(c->argv[2]) 是进行 encode value的数据格式(选择sds,zlist,hash,sorted set,list等),设置 

第二行 ,调用setGenericCommand方法:

Redis 学习笔记(二)——全局哈希表的数据写入_第7张图片

setKey是真正的进行(key, value)写入的,setKey函数是在文件db.c中,

Redis 学习笔记(二)——全局哈希表的数据写入_第8张图片

最终,在db.c文件里的dbAdd函数,调用dict.c 的 dictAdd函数,将(key, value)插入到全局的哈希表里。

Redis 学习笔记(二)——全局哈希表的数据写入_第9张图片

还有个细节需要注意:这里的key和value,都是 rojb 结构的,也就是 redisObject 结构体,定义在 server.h 文件中

Redis 学习笔记(二)——全局哈希表的数据写入_第10张图片

 

你可能感兴趣的:(redis,redis)