Redis源码分析(八)---t_hash哈希转换(三)

2015-07-24 12:04:41 · 作者: · 浏览: 100
alue; } 客户端的命令操作其实是基于一个叫redisClient的对象,这个其实也就是robj对象,命令传输时,这个robj->ptr存着,具体的数据,robj->args[]存放了各种参数,后面就是调用前面的方法了,唯一不一样的是,命令调用后要有回复和更新通知操作。,下面是一个设置的命令;?
/* hashType处理客户端的命令请求 */
void hsetCommand(redisClient *c) {
    int update;
    robj *o;

    if ((o = hashTypeLookupWriteOrCreate(c,c->argv[1])) == NULL) return;
    hashTypeTryConversion(o,c->argv,2,3);
    hashTypeTryObjectEncoding(o,&c->argv[2], &c->argv[3]);
    //命令的操作都是通过,客户端中的对象,和存在于里面的命令参数组成
    update = hashTypeSet(o,c->
argv[2],c->argv[3]); //操作完添加回复 addReply(c, update ? shared.czero : shared.cone); //发送通知表示命令执行完毕,预测者会触发窗口上的显示 signalModifiedKey(c->db,c->argv[1]); notifyKeyspaceEvent(REDIS_NOTIFY_HASH,"hset",c->argv[1],c->db->id); //客户端命令执行成功,因为客户单此时的数据时最新的,服务端的脏数据就自然多了一个, server.dirty++; }
其他命令与此类似,就不说了。可以看见,现在慢慢的能够略微向逻辑层的代码靠近了,后面的代码也一定非常精彩。