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

这篇博客详细介绍了Redis中全局哈希表的数据结构,从server.h文件的client结构体开始,逐步深入到redisDb结构体,以及如何通过setCommand命令将(key, value)对插入到全局哈希表中。在db.c文件的dbAdd函数中,利用dictAdd函数完成这一过程。整个流程涉及到的对象和结构体,如redisObject,都在server.h中定义。
摘要由CSDN通过智能技术生成

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 文件中

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值