Redis全局哈希表的数据结构
server.h文件中定义了 client 结构体,
其中,redisDb *db 和参数 int dictid 表示当前的redis数据库。
命令的参数是字段 robj *argv,其中 argv[1] 是key,argv[2] 是value;
redisDb也是在server.h 中定义的结构体,
在redisDb中,定义了全局的哈希表(dict *dict),用于保存所有的key和value
执行命令,插入全局哈希表的流程
以String 的 set命令为例,在server.c 文件中,定义了set命令,
其中setCommand是具体要执行的函数,定义在server.h文件中:
setCommand命令的参数就是client 对象,具体执行是在 t_string.c 文件中:
其中,第一行 c->argv[2] = tryObjectEncoding(c->argv[2]) 是进行 encode value的数据格式(选择sds,zlist,hash,sorted set,list等),设置
第二行 ,调用setGenericCommand方法:
setKey是真正的进行(key, value)写入的,setKey函数是在文件db.c中,
最终,在db.c文件里的dbAdd函数,调用dict.c 的 dictAdd函数,将(key, value)插入到全局的哈希表里。
还有个细节需要注意:这里的key和value,都是 rojb 结构的,也就是 redisObject 结构体,定义在 server.h 文件中