欢迎投稿

今日深度:

Redis 源码学习-Redis命令 get,

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

www.htsjk.Com true http://www.htsjk.com/redis/42716.html NewsArticle Redis 源码学习-Redis命令 get, get命令的实现是t_string.c中的getCommand函数。 void getCommand(redisClient *c) { getGenericCommand(c);}int getGenericCommand(redisClient *c) { robj *o; // 尝试从数据库中取出键 c-argv...
评论暂时关闭