天天看點

Hiredis_API說明



同步的API接口

redisContext *redisConnect(const char *ip, int port);

void *redisCommand(redisContext *c, const char *format, ...);

void freeReplyObject(void *reply);

1)建立連接配接

redisContext *c = redisConnect("127.0.0.1", 6379);

if (c != NULL && c->err) {

        printf("Error: %s\n", c->errstr);

            // handle error

}

redisConnect函數用來建立一個叫redisContext的東西,它包含了連接配接相關的資訊

它裡面有個err字段,0表示正常,其他表示出錯了!通過errstr字段可以知曉錯誤資訊

2)執行指令

reply = redisCommand(context, "SET key value");

reply = redisCommand(context, "SET key %s", value);

reply = redisCommand(context, "SET key %b", value, (size_t) valuelen);

reply = redisCommand(context, "SET key:%s %s", myid, value);

redisCommand的調用格式類似printf函數,上面的第二條調用語句的作用在于

輸入二進制格式的value内容,其後必須表明二進制的位元組長度!

3)redisCommand函數傳回一個東西叫redisReply,我們需要通過判斷它的type字段

來知道傳回了具體什麼樣的内容:

REDIS_REPLY_STATUS      表示狀态,内容通過str字段檢視,字元串長度是len字段

REDIS_REPLY_ERROR       表示出錯,檢視出錯資訊,如上的str,len字段

REDIS_REPLY_INTEGER    傳回整數,從integer字段擷取值

REDIS_REPLY_NIL            沒有資料傳回

REDIS_REPLY_STRING      傳回字元串,檢視str,len字段

REDIS_REPLY_ARRAY       傳回一個數組,檢視elements的值(數組個數),通過

                                      element[index]的方式通路數組元素,每個數組元素是

                                      一個redisReply對象的指針

4)另外有一個類似的函數,批量執行指令:

void *redisCommandArgv(redisContext *c, int argc,

    const char **argv, const size_t *argvlen);

5)redisReply使用完畢後,需要使用函數freeReplyObject進行釋放銷毀

void redisFree(redisContext *c)的作用是斷開連接配接,并釋放redisContext的内容

6)redisCommand的函數執行流程說明:

a.格式化redis command

b.格式化後的指令内容放入redisContext的輸出緩沖區

c.調用redisGetReply函數執行指令,得到結果

7)管道的使用方式:

a.填入需要執行的指令

void redisAppendCommand(redisContext *c, const char *format, ...);

void redisAppendCommandArgv(redisContext *c, int argc,

b.擷取指令的輸出結果

int redisGetReply(redisContext *c, void **reply);

c.釋放輸出結果

例子:

redisReply *reply = NULL;

redisAppendCommand(context,"set key1 value");

redisAppendCommand(context,"get key2");

redisGetReply(context,&reply); // reply for set

freeReplyObject(reply);

redisGetReply(context,&reply); // reply for get

訂閱模式:

reply = redisCommand(context,"SUBSCRIBE test");

while(redisGetReply(context,&reply) == REDIS_OK) {

        // consume message

        freeReplyObject(reply);

8)redisReply傳回結果處理:

REDIS_OK                    正常

REDIS_ERR_IO          IO讀/寫出現異常,通過errno檢視原因

REDIS_ERR_EOF            伺服器關閉了連結,讀結束

REDIS_ERR_PROTOCOL  分析redis協定内容出錯

EDIS_ERR_OTHER          其他未知的錯誤

上述錯誤類型都可以通過redisReply的errstr字段檢視簡短的描述

C)異步API(異步API的使用方式和同步API差不多,在這兒列出不同的函數吧)

1.連接配接redis伺服器

redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);

if (c->err) {

2.設定連接配接、斷開的鈎子函數

int redisAsyncSetConnectCallback(redisAsyncContext *ac,

        redisConnectCallback *fn);

int redisAsyncSetDisconnectCallback(redisAsyncContext *ac,

    redisDisconnectCallback *fn);

3.插入指令資訊

int redisAsyncCommand(

    redisAsyncContext *ac, redisCallbackFn *fn, void *privdata,

    const char *format, ...);

int redisAsyncCommandArgv(

    int argc, const char **argv, const size_t *argvlen);

擷取指令輸出和同步API相同

4.關閉連接配接

void redisAsyncDisconnect(redisAsyncContext *ac);

D)輔助API

下面的API主要用于其他程式設計語言綁定的術後,可以讀取分析資料

redisReader *redisReaderCreate(void);

void redisReaderFree(redisReader *reader);

int redisReaderFeed(redisReader *reader, const char *buf, size_t len);

int redisReaderGetReply(redisReader *reader, void **reply);

繼續閱讀