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++;
}
其他命令与此类似,就不说了。可以看见,现在慢慢的能够略微向逻辑层的代码靠近了,后面的代码也一定非常精彩。