修改redis源码自定义hello-world命令
在前述文章里,我有总结过Redis命令执行的大概过程,现在我们根据这个过程来实现一个hello命令返回world结果
前面的部分可以和系统共用,从processCommand开始
一、要声明一个命令,以便lookupCommand查找到
在server.c 127行有redisCommandTable的定义,在75行到126行有它的定义解释
在240行找到ping命令的定义,对照编辑一行hello命令
{"ping",pingCommand,-1,"tF",0,NULL,0,0,0,0,0},
{"hello",helloCommand,1,"lt",0,NULL,0,0,0,0,0}
二、在server.h声明helloCommand的命令类别函数
pingCommand的定义在1936行,在这个模块末尾加上hellocommand的声明即可
void helloCommand(client *c);
三、编写hello命令的函数
server.c 2910到2931行有ping的命令
void pingCommand(client *c) {
if (c->argc == 1)
addReply(c,shared.pong);
}
返回的shared.pong是前面讲到的共享对象,共享对象的源码在server.h的782行
在共享对象里新增world信息 *world
并在createSharedObjects函数里新增 *world返回结果 server.c 1435行
shared.pong = createObject(OBJ_STRING,sdsnew("+PONG\r\n"));
void helloCommand(client *c) {
if (c->argc == 1)
addReply(c,shared.hello);
}
四、编译并缺省启动Redis-server
make PREFIX=/app/zhouqw/src/redis-5.0.4/ install
[root@node202 bin]# pwd
/app/zhouqw/src/redis-5.0.4/bin
[root@node202 ~]# ./redis-server &