手把手教你redis資料庫的二次開發

來源:互聯網
上載者:User

本教程系列由本人總結,未經本人允許,謝絕轉載。

功能說明:通過修改原始碼的形式,實現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 jianghuiwenvoid 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安裝或者編譯有疑問,可以在這篇文章下留言,我會儘快回答。


該文章來自IT部落格,http://www.itbuluoge.com。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.