Redis 源码学习-Redis命令 get

get命令的实现是t_string.c中的getCommand函数。

void getCommand(redisClient *c) {
    getGenericCommand(c);
}

int getGenericCommand(redisClient *c) {
    robj *o;

    // 尝试从数据库中取出键 c->argv[1] 对应的值对象
    // 如果键不存在时,向客户端发送回复信息,并返回 NULL
    if ((o = lookupKeyReadOrReply(c,c->argv[1],shared.nullbulk)) == NULL)
        return REDIS_OK;

    // 值对象存在,检查它的类型
    if (o->type != REDIS_STRING) {
        // 类型错误
        addReply(c,shared.wrongtypeerr);
        return REDIS_ERR;
    } else {
        // 类型正确,向客户端返回对象的值
        addReplyBulk(c,o);
        return REDIS_OK;
    }
}

关于上面的检查类型,redis在redis.h中定义了五种对象类型。

#define REDIS_STRING 0
#define REDIS_LIST 1
#define REDIS_SET 2
#define REDIS_ZSET 3
#define REDIS_HASH 4
上一篇:初体验——从零到一上手玩转云服务器


下一篇:Redis 源码学习- Redis命令