如何使Redis能够在运行时获取和修改AOF文件名

最近通过编译源码的方式安装Redis服务器(版本:redis-3.2.1.tar.gz),我发现Redis客户端的config getconfig 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 getconfig set命令的实现代码,分别是configGetCommand()函数(第1036行)和configSetCommand()函数(第707行),如以下两个图所示:

CONFIG GET命令的位置

CONFIG SET命令的位置

Step-2 修改config get命令

仿照dbfilename配置项的源码,在config.c源文件的第1045行下面新建一行,然后添加如下代码:

  1. config_get_string_field("appendfilename",server.aof_filename);

修改后的代码,如下图所示:

向CONFIG GET命令添加AOF支持

Step-3 修改config set命令

仿照dbfilename配置项的源码,在config.c源文件的第725行的右花括号后面添加一个空格,然后添加以下代码:

  1. else if (!strcasecmp(argv[0],"appendfilename") && argc == 2) {
  2. if (!pathIsBaseName(argv[1])) {
  3. err = "appendfilename can't be a path, just a filename";
  4. goto loaderr;
  5. }
  6. zfree(server.aof_filename);
  7. server.aof_filename = zstrdup(argv[1]);
  8. }

修改后的代码,如下图所示:

向CONFIG SET命令添加AOF功能

Step-4 编译安装Redis

将修改后的源码目录拷贝至服务器的/root/Downloads目录,然后按照《在CentOS上安装Redis缓存系统》的说明,编译安装Redis服务器。

Step-5 获取和修改AOF文件名

编译安装完成之后,在Shell中运行以下命令:

  1. redis-cli config get appendfilename

上述命令的返回信息如下图所示:

CONFIG GET的运行结果

由上图可知,Redis默认的AOF文件名是appendonly.aof。在Shell中运行以下命令,首先修改AOF文件名,然后查看修改后的文件名:

  1. redis-cli config set appendfilename redis-log.aof
  2. redis-cli config get appendfilename

上述命令的返回信息如下图所示:

CONFIG SET的运行结果

注意
Redis的源码很有可能还遗漏了对其他配置项在运行时获取和修改配置值的支持,如果发现这种情况,依然可以参考本文进行相应的修改。