Redis源码解析(十六)--- config配置文件

本文探讨Redis配置文件中的属性,并非简单列举,而是深入解析程序员在编写配置代码时的思路和亮点。在config.h头文件中,根据操作系统进行预处理,如在Linux上支持修改进程名称。主要涉及从配置文件读取并更新server属性,以及将服务器设置写回配置文件。文章通过rewriteConfigState结构体来组织属性配置,每个字符串数组对应一种属性设置。
摘要由CSDN通过智能技术生成

          每个系统都会有类似一个config配置文件,config文件里的内容想想都知道,一定就是那么一些固定的一行行的属性代码了,今天在看redis代码中的config属性,那拉下来的一笔,的确多,目测在50至100个属性左右。如果就此将config每个属性代表什么意思不是我的风格,也一定是很乏味的,所以我的特点就是在代码中去理解程序员在写这类代码时的思路,和茫茫代码中的亮点。我们知道,redis运行的环境包括很多种的,windows,Linux,mac os等等,不同的操作系统,当然有些属性就不能支持了,所以在redis中的config.h头文件中跟据计算机所属于的操作系统,做了很多的预处理,比如说,在Linux等系统上,是可以支持修改进程名称的:

/* Check if we can use setproctitle().
 * BSD systems have support for it, we provide an implementation for
 * Linux and osx. */
/* 检查是否能调用setproctitle(),这个方法是Linux上修改进程名称的方法 */
/* 这里通过判断是否是BSD系统,BSD是Berkeley Systems Distrobution的缩写,是一种UNIX版本 */
#if (defined __NetBSD__ || defined __FreeBSD__ || defined __OpenBSD__)
#define USE_SETPROCTITLE
#endif

#if (defined __linux || defined __APPLE__)
#define USE_SETPROCTITLE
#define INIT_SETPROCTITLE_REPLACEMENT
void spt_init(int argc, char *argv[]);
void setproctitle(const char *fmt, ...);
#endif
当然这只是我提到的一点,也就是说,redis在异构系统的处理上,考虑的还是非常周全的。我们主要看看config主要的操作文件,先看看里面的一些API:

 /* Config file API */
int yesnotoi(char *s) /* 判断字符是否为yes */
void appendServerSaveParams(time_t seconds, int changes) /* 追加server save参数 */
void resetServerSaveParams(void) /* 重置server的save参数,即释放server的serverParams */
void loadServerConfigFromString(char *config) /* 从字符串中加载server属性配置 */
void loadServerConfig(char *filename, char *options) /* 从文件中加载server配置 */
void configSetCommand(redisClient *c) /* 根据redisClient中的参数设置server的配置 */
#define config_get_string_field(_name,_var) /* 宏定义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值