最近通过编译源码的方式安装Redis服务器(版本:redis-3.2.1.tar.gz),我发现Redis客户端的config get
和config set
命令并没有为appendfilename
配置项提供支持,也就无法在Redis运行时获取和设置AOF文件的名称。
本文将会描述如何修改config.c
源文件,添加相应的支持代码,使上述两个命令支持appendfilename
配置项。
Step-1 打开config.c源文件
解压缩redis-3.2.1.tar.gz源码包,进入redis-3.2.1\src
目录,使用Notepad++打开config.c
源文件。在这个文件中,可以找到config get
和config set
命令的实现代码,分别是configGetCommand()
函数(第1036行)和configSetCommand()
函数(第707行),如以下两个图所示:
Step-2 修改config get命令
仿照dbfilename
配置项的源码,在config.c
源文件的第1045行下面新建一行,然后添加如下代码:
config_get_string_field("appendfilename",server.aof_filename);
修改后的代码,如下图所示:
Step-3 修改config set命令
仿照dbfilename
配置项的源码,在config.c
源文件的第725行的右花括号后面添加一个空格,然后添加以下代码:
else if (!strcasecmp(argv[0],"appendfilename") && argc == 2) {
if (!pathIsBaseName(argv[1])) {
err = "appendfilename can't be a path, just a filename";
goto loaderr;
}
zfree(server.aof_filename);
server.aof_filename = zstrdup(argv[1]);
}
修改后的代码,如下图所示:
Step-4 编译安装Redis
将修改后的源码目录拷贝至服务器的/root/Downloads
目录,然后按照《在CentOS上安装Redis缓存系统》的说明,编译安装Redis服务器。
Step-5 获取和修改AOF文件名
编译安装完成之后,在Shell中运行以下命令:
redis-cli config get appendfilename
上述命令的返回信息如下图所示:
由上图可知,Redis默认的AOF文件名是appendonly.aof
。在Shell中运行以下命令,首先修改AOF文件名,然后查看修改后的文件名:
redis-cli config set appendfilename redis-log.aof
redis-cli config get appendfilename
上述命令的返回信息如下图所示:
由上图可知,已经成功地将AOF文件名修改为redis-log.aof
。至此,已经成功使得Redis能够在运行时获取和修改AOF文件名了!
注意
Redis的源码很有可能还遗漏了对其他配置项在运行时获取和修改配置值的支持,如果发现这种情况,依然可以参考本文进行相应的修改。