Redis源码解析(二):redis之服务器-redis.c(一)

2015-11-21 01:44:47 · 作者: · 浏览: 10

我们一次来看这份代码,揭开redis服务器的神秘面纱。

首先是命令映射表:

/*命令映射表,参数1:命令,参数2:指向实现此命令的函数,参数3:参数个数,参数4:标志位(具体信息看注释),
 *参数5:从参数4计算而得到的字节掩码,参数6:作为可选项的获取键值的函数,参数7:第一个索引位置,参数8:最后一个索引位置
 *参数9:增量,参数10:命令执行时间,参数11:命令调用次数
 */
struct redisCommand redisCommandTable[] = {
    //获取字符串命令
    {"get",getCommand,2,"rF",0,NULL,1,1,1,0,0},
    //设置字符串命令
    {"set",setCommand,-3,"wm",0,NULL,1,1,1,0,0},
    //当且仅当key不存在的情况设置字符串
    {"setnx",setnxCommand,3,"wmF",0,NULL,1,1,1,0,0},
    //当且仅当key存在的情况设置字符串,生存时间为秒级
    {"setex",setexCommand,4,"wm",0,NULL,1,1,1,0,0},
    //设置字符串,生存时间为毫秒级
    {"psetex",psetexCommand,4,"wm",0,NULL,1,1,1,0,0},
    //如果key存在则在末尾加如果不存在就相当于set
    {"append",appendCommand,3,"wm",0,NULL,1,1,1,0,0},
    //字符串长度
    {"strlen",strlenCommand,2,"rF",0,NULL,1,1,1,0,0},
    //删除一个或多个key
    {"del",delCommand,-2,"w",0,NULL,1,-1,1,0,0},
    //判断key是否存在
    {"exists",existsCommand,2,"rF",0,NULL,1,1,1,0,0},
    //当key存在时清除偏移量后面的值,否则自动生成新字符串
    {"setbit",setbitCommand,4,"wm",0,NULL,1,1,1,0,0},
    //获取指定偏移量后的位
    {"getbit",getbitCommand,3,"rF",0,NULL,1,1,1,0,0},
    {"setrange",setrangeCommand,4,"wm",0,NULL,1,1,1,0,0},
    {"getrange",getrangeCommand,4,"r",0,NULL,1,1,1,0,0},
    {"substr",getrangeCommand,4,"r",0,NULL,1,1,1,0,0},
    {"incr",incrCommand,2,"wmF",0,NULL,1,1,1,0,0},
    {"decr",decrCommand,2,"wmF",0,NULL,1,1,1,0,0},
    {"mget",mgetCommand,-2,"r",0,NULL,1,-1,1,0,0},
    {"rpush",rpushCommand,-3,"wmF",0,NU
LL,1,1,1,0,0}, {"lpush",lpushCommand,-3,"wmF",0,NULL,1,1,1,0,0}, {"rpushx",rpushxCommand,3,"wmF",0,NULL,1,1,1,0,0}, {"lpushx",lpushxCommand,3,"wmF",0,NULL,1,1,1,0,0}, {"linsert",linsertCommand,5,"wm",0,NULL,1,1,1,0,0}, {"rpop",rpopCommand,2,"wF",0,NULL,1,1,1,0,0}, {"lpop",lpopCommand,2,"wF",0,NULL,1,1,1,0,0}, {"brpop",brpopCommand,-3,"ws",0,NULL,1,1,1,0,0}, {"brpoplpush",brpoplpushCommand,4,"wms",0,NULL,1,2,1,0,0}, {"blpop",blpopCommand,-3,"ws",0,NULL,1,-2,1,0,0}, {"llen",llenCommand,2,"rF",0,NULL,1,1,1,0,0}, {"lindex",lindexCommand,3,"r",0,NULL,1,1,1,0,0}, {"lset",lsetCommand,4,"wm",0,NULL,1,1,1,0,0}, {"lrange",lrangeCommand,4,"r",0,NULL,1,1,1,0,0}, {"ltrim",ltrimCommand,4,"w",0,NULL,1,1,1,0,0}, {"lrem",lremCommand,4,"w",0,NULL,1,1,1,0,0}, {"rpoplpush",rpoplpushCommand,3,"wm",0,NULL,1,2,1,0,0}, {"sadd",saddCommand,-3,"wmF",0,NULL,1,1,1,0,0}, {"srem",sremCommand,-3,"wF",0,NULL,1,1,1,0,0}, {"smove",smoveCommand,4,"wF",0,NULL,1,2,1,0,0}, {"sismember",sismemberCommand,3,"rF",0,NULL,1,1,1,0,0}, {"scard",scardCommand,2,"rF",0,NULL,1,1,1,0,0}, {"spop",spopCommand,2,"wRsF",0,NULL,1,1,1,0,0}, {"srandmember",srandmemberCommand,-2,"rR",0,NULL,1,1,1,0,0}, {"sinter",sinterCommand,-2,"rS",0,NULL,1,-1,1,0,0}, {"sinterstore",sinterstoreCommand,-3,"wm",0,NULL,1,-1,1,0,0}, {"sunion",sunionCommand,-2,"rS",0,NULL,1,-1,1,0,0}, {"sunionstore",sunionstoreCommand,-3,"wm",0,NULL,1,-1,1,0,0}, {"sdiff",sdiffCommand,-2,"rS",0,NULL,1,-1,1,0,0}, {"sdiffstore",sdiffstoreCommand,-3,"wm",0,NULL,1,-1,1,0,0}, {"smembers",sinterCommand,2,"rS",0,NULL,1,1,1,0,0}, {"sscan",sscanCommand,-3,"rR",0,NULL,1,1,1,0,0}, {"zadd",zaddCommand,-4,"wmF",0,NULL,1,1,1,0