Redis源码分析系列四

if (server.sentinel_mode)
 {
        initSentinelConfig();
        initSentinel();
    }
 //假定这里运行的并不是哨兵模式,所以这段代码并不执行。

再看剩下的代码

 

if (argc >= 2)
 {
        int j = 1; /* First option to parse in argv[] */
        sds options = sdsempty();
        char *configfile = NULL;

        /* Handle special options --help and --version */
        if (strcmp(argv[1], "-v") == 0 ||
            strcmp(argv[1], "--version") == 0) version();
        if (strcmp(argv[1], "--help") == 0 ||
            strcmp(argv[1], "-h") == 0) usage();
        if (strcmp(argv[1], "--test-memory") == 0) {
            if (argc == 3) {
                memtest(atoi(argv[2]),50);
                exit(0);
            } else {
                fprintf(stderr,"Please specify the amount of memory to test in megabytes.\n");
                fprintf(stderr,"Example: ./redis-server --test-memory 4096\n\n");
                exit(1);
            }
        }

        /* First argument is the config file name? */
        if (argv[j][0] != '-' || argv[j][1] != '-')
            configfile = argv[j++];
        /* All the other options are parsed and conceptually appended to the
         * configuration file. For instance --port 6380 will generate the
         * string "port 6380\n" to be parsed after the actual file name
         * is parsed, if any. */
        while(j != argc) {
            if (argv[j][0] == '-' && argv[j][1] == '-') {
                /* Option name */
                if (sdslen(options)) options = sdscat(options,"\n");
                options = sdscat(options,argv[j]+2);
                options = sdscat(options," ");
            } else {
                /* Option argument */
                options = sdscatrepr(options,argv[j],strlen(argv[j]));
                options = sdscat(options," ");
            }
            j++;
        }
        resetServerSaveParams();
        loadServerConfig(configfile,options);
        sdsfree(options);
        if (configfile) server.configfile = getAbsolutePath(configfile);
    }
 else
 {
        redisLog(REDIS_WARNING, "Warning: no config file specified, using the default config. In order to specify a config file use %s /path/to/%s.conf", argv[0], server.sentinel_mode ? "sentinel" : "redis");
    }

//这段代码我没有细看,感觉应该是读取配置文件到系统中。

loadServerConfig函数中,

while(fgets(buf,REDIS_CONFIGLINE_MAX+1,fp) != NULL)
            config = sdscat(config,buf);

是读取每一行,拼接在一起,然后把字符串交给loadServerConfigFromString处理,

这里我先把配置文件中的有效项提取出来,如下:

daemonize no--->server.daemonize

pidfile  /var/run/redis.pid--->server.pidfile

port 6379 --->   server.port

timeout 0---> server.maxidletime

tcp-keepalive 0--->server.tcpkeepalive

loglevel notice--->server.verbosity

logfile "" --->server.logfile

databases 16 --->server.dbnum

save 900 1
save 300 10
save 60 10000--->类似之前的appendServerSaveParams(seconds,changes);

stop-writes-on-bgsave-error yes--->server.stop_writes_on_bgsave_err

rdbcompression yes--->server.rdb_compression

好累,下面的几个变量请大家自己对应起来

rdbchecksum yes

dbfilename dump.rdb

dir ./

slave-serve-stale-data yes

slave-read-only yes

repl-disable-tcp-nodelay no

slave-priority 100

appendonly no

appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

lua-time-limit 5000

slowlog-log-slower-than 10000

 


slowlog-max-len 128
notify-keyspace-events ""

hash-max-ziplist-entries 512
hash-max-ziplist-value 64

list-max-ziplist-entries 512
list-max-ziplist-value 64

set-max-intset-entries 512

zset-max-ziplist-entries 128
zset-max-ziplist-value 64

activerehashing yes

client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

aof-rewrite-incremental-fsync yes

总之,就是读取配置文件到系统中去,没啥好说的。

好,继续往下看。

if (server.daemonize) daemonize();
 //根据配置文件,这里不会是后台执行

今天的任务完成了,后面的一个函数非常重要,下回再研究,

洗澡,睡觉!

吐个槽:南京的公司真的太少太少了!!!令人发指的少!

 

 

转载于:https://my.oschina.net/qiangzigege/blog/169421

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值