最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

手把手教你redis数据库的二次开发

来源:动视网 责编:小采 时间:2020-11-09 07:33:27
文档

手把手教你redis数据库的二次开发

手把手教你redis数据库的二次开发:功能说明:通过修改源代码的形式,实现redis自带的命令set key value的功能。并且新的命令为make key value,注意,所有修改的源文件都处于src目录下面 需要修改的部分: 1 redis.c 该文件是redis数据库服务器端主文件,也就是main函数入口处。所有的命令
推荐度:
导读手把手教你redis数据库的二次开发:功能说明:通过修改源代码的形式,实现redis自带的命令set key value的功能。并且新的命令为make key value,注意,所有修改的源文件都处于src目录下面 需要修改的部分: 1 redis.c 该文件是redis数据库服务器端主文件,也就是main函数入口处。所有的命令


功能说明:通过修改源代码的形式,实现redis自带的命令set key value的功能。并且新的命令为make key value,注意,所有修改的源文件都处于src目录下面 需要修改的部分: 1 redis.c 该文件是redis数据库服务器端主文件,也就是main函数入口处。所有的命令定

功能说明:通过修改源代码的形式,实现redis自带的命令set key value的功能。并且新的命令为make key value,注意,所有修改的源文件都处于src目录下面

需要修改的部分:

1 redis.c

该文件是redis数据库服务器端主文件,也就是main函数入口处。所有的命令定义均在该文件定义的全局变量中。

struct redisCommand redisCommandTable[] = {
 {"get",getCommand,2,"r",0,NULL,1,1,1,0,0},
 {"make",makeCommand,3,"wm",0,NULL,1,1,1,0,0},//our function
 {"set",setCommand,-3,"wm",0,noPreloadGetKeys,1,1,1,0,0},
 {"setnx",setnxCommand,3,"wm",0,noPreloadGetKeys,1,1,1,0,0},
 {"setex",setexCommand,4,"wm",0,noPreloadGetKeys,1,1,1,0,0},
 {"psetex",psetexCommand,4,"wm",0,noPreloadGetKeys,1,1,1,0,0},
 {"append",appendCommand,3,"wm",0,NULL,1,1,1,0,0},
 {"strlen",strlenCommand,2,"r",0,NULL,1,1,1,0,0},

......这里省略.......
结构体redisCommand就是保存redis数据库的所有命令。我们在第二行添加了一句:
 {"make",makeCommand,3,"wm",0,NULL,1,1,1,0,0},//our function
其中注意,第一个参数为命令,第二个为命令调用的函数,第三个三参数。比如set key value 一共就是三个参数,注意如果输入命令和参数不同,服务器端会给出提示。

2 redis.h

该文件是头文件,需要在这里添加对函数的原型声明。

/* Commands prototypes */
void authCommand(redisClient *c);
void pingCommand(redisClient *c);
void echoCommand(redisClient *c);
void setCommand(redisClient *c);
void makeCommand(redisClient *c);
void setnxCommand(redisClient *c);

...............省略.................

我们在头文件上添加我们新的函数原型
void makeCommand(redisClient *c);

3 t_string.c

该文件是函数的实现文件。

//add by jianghuiwen
void makeCommand(redisClient *c)
{
	setKey(c->db,c->argv[1],c->argv[2]);
	addReply(c, shared.ok);
	return;
}
void getCommand(redisClient *c) {
 getGenericCommand(c);
}
如上述所示,
void makeCommand(redisClient *c)
就是我们自己定义的实现函数,

其中参数是redisClient *c,也就是客户端请求(我这里暂时这么说,具体的我会在教程做进一步说明)。

setKey(c->db,c->argv[1],c->argv[2]);这里setKey是一个函数,该函数的作用就是设置数据库中键值的函数,其中第一个参数为系统指定的数据库,第二个参数为客户端请求第二个参数,第三个参数为客户端命令第三个参数。

也就是分别对应:set key value中的key 和value。

addReply(c, shared.ok);是给客户端返回一个OK消息,相当于发一个信号,否则客户端会等待。

上面三个参数修改完成后,在src上一层目录进行make,重新编译,然后运行服务器端和客户端

在客户端输入make name jiang

再输入get name

服务器端会返回jiang。说明执行成功。

如果对于redis安装或者编译有疑问,可以在这篇帖子下留言,我会尽快回答。

文档

手把手教你redis数据库的二次开发

手把手教你redis数据库的二次开发:功能说明:通过修改源代码的形式,实现redis自带的命令set key value的功能。并且新的命令为make key value,注意,所有修改的源文件都处于src目录下面 需要修改的部分: 1 redis.c 该文件是redis数据库服务器端主文件,也就是main函数入口处。所有的命令
推荐度:
标签: 功能 数据 教你
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top