redis initServerConfig

首先初始化默認配置

變量

默認值

server.runid

d3d11e6a9a2ee8876697355a44117dfcfe87fce3

server.configfile

NULL

server.hz

10

server.arch_bits

64

server.port

6379

server.tcp_backlog

511

server.bindaddr_count

0

server.unixsocket

NULL

server.unixsocketperm

0

server.ipfd_count

0

server.sofd

-1

server.dbnum

16

server.verbosity

REDIS_NOTICE

server.maxidletime

0

server.tcpkeepalive

0

server.logfile

“”

server.syslog_enabled

0

server.syslog_identa

redis

server.syslog_facility

LOG_LOCAL0

server.aof_state

0

server.aof_fsync

2

server.aof_no_fsync_on_rewrite

0

server.aof_rewrite_perc

100

server.aof_rewrite_min_size

64*1024*1024

server.aof_rewrite_base_size

0

server.aof_rewrite_scheduled

0

server.aof_last_fsync

time(NULL)

server.aof_rewrite_time_last

-1

server.aof_rewrite_time_start

-1

server.aof_lastbgrewrite_status

0

server.aof_delayed_fsync

0

server.aof_fd

-1

server.aof_selected_db

-1

server.aof_flush_postponed_start

0

server.aof_rewrite_incremental_fsync

1

 

其中populateCommandTable 函數主要是對redisCommandTable hash(command name -> command struct)到server.commands

void populateCommandTable(void) {
int j;
int numcommands = sizeof(redisCommandTable)/sizeof(struct redisCommand);
//遍歷redisCommandTable
for (j = 0; j < numcommands; j++) {
struct redisCommand *c = redisCommandTable+j;
char *f = c->sflags;
int retval1, retval2;
//command flags 轉換
while(*f != '\0') {
switch(*f) {
            case 'w': c->flags |= REDIS_CMD_WRITE; break;
            case 'r': c->flags |= REDIS_CMD_READONLY; break;
            case 'm': c->flags |= REDIS_CMD_DENYOOM; break;
            case 'a': c->flags |= REDIS_CMD_ADMIN; break;
            case 'p': c->flags |= REDIS_CMD_PUBSUB; break;
            case 's': c->flags |= REDIS_CMD_NOSCRIPT; break;
            case 'R': c->flags |= REDIS_CMD_RANDOM; break;
            case 'S': c->flags |= REDIS_CMD_SORT_FOR_SCRIPT; break;
            case 'l': c->flags |= REDIS_CMD_LOADING; break;
            case 't': c->flags |= REDIS_CMD_STALE; break;
            case 'M': c->flags |= REDIS_CMD_SKIP_MONITOR; break;
            case 'k': c->flags |= REDIS_CMD_ASKING; break;
            case 'F': c->flags |= REDIS_CMD_FAST; break;
            default: redisPanic("Unsupported command flag"); break;
            }
            f++;
        }

        //加入到server.commands hash table. Hash table 數據結構後面會有講到
        retval1 = dictAdd(server.commands, sdsnew(c->name), c);
        /* Populate an additional dictionary that will be unaffected
         * by rename-command statements in redis.conf. */
        retval2 = dictAdd(server.orig_commands, sdsnew(c->name), c);
        redisAssert(retval1 == DICT_OK && retval2 == DICT_OK);
    }
}

 

其中redisCommandTable是已經初始化好的commands 數組

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},
    {"setnx",setnxCommand,3,"wmF",0,NULL,1,1,1,0,0},
    {"setex",setexCommand,4,"wm",0,NULL,1,1,1,0,0},
    {"psetex",psetexCommand,4,"wm",0,NULL,1,1,1,0,0},
    {"append",appendCommand,3,"wm",0,NULL,1,1,1,0,0},
    {"strlen",strlenCommand,2,"rF",0,NULL,1,1,1,0,0},
    {"del",delCommand,-2,"w",0,NULL,1,-1,1,0,0},
    {"exists",existsCommand,-2,"rF",0,NULL,1,-1,1,0,0},
    {"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},...}

 

發佈了83 篇原創文章 · 獲贊 8 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章