Hiredis 基本使用

2021-07-13 04:53:19 字數 3004 閱讀 3335



0. 前言

hiredis是乙個redis的c客戶端庫函式,基本實現了redis的協議的最小集。這裡對hiredis的api作基本的介紹以及應用,主要參考hiredis的readme檔案以及相關原始碼。

1. 同步api

rediscontext,該庫的上下文環境。

1

/*context for a connection to redis

*/2 typedef struct

rediscontext tcp;

1819

struct

unix_sock;

2223 } rediscontext;

a. 連線redis

1

//連線redis,若出錯rediscontext.err會設定為1,rediscontext.errstr會包含描述錯誤資訊

2 rediscontext *redisconnect(const

char *ip, int port);

b. 同步執行redis命令

1/*2

3同步執行redis命令,和printf類似,%b傳入二進位制資料,要求有size_t引數指定長度。例如rediscommmand( c, "set foo %b", arr, (size_t)len );

4失敗:返回null,並且err欄位會置1,一旦執行出錯,該rediscontext就不能再使用,需要重新連線

5成功:返回redisreply的指標67

*/8void *rediscommand(rediscontext *c, const

char *format, ...);

1/*2

傳送一組命令,通過argv以及argvlen指定,當argvlen為null時,argv每個字串的長度通過strlen來計算,所以當需要傳輸二進位制資料時,整個argvlen資料都要輸入。3*/

4void *rediscommandargv(rediscontext *c, int argc, const

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

/*7piplining,追加的命令後可以通過redisgetreply來獲取命令的返回值。8*/

9char *format, ...);

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

1112

//獲取命令返回值,注:使用freereplyobject釋放

13int redisgetreply(rediscontext *c, void **reply);

c. 響應的資料結構

typedef struct

redisreply redisreply;

redis返回資料的型別,redisreply.type欄位

1

#define redis_reply_string 1 //

字串2

#define redis_reply_array 2 //

陣列,多個reply,通過element陣列以及elements陣列大小訪問

3#define redis_reply_integer 3 //

整型, integer欄位

4#define redis_reply_nil 4 //

空,沒有資料

5#define redis_reply_status 5 //

狀態,str字串以及len

6#define redis_reply_error 6 //

錯誤,同status

d. 釋放資源

1

//釋放reply結構

2void freereplyobject(void *reply);

//

關閉連線並釋放記憶體

void redisfree(rediscontext *c);

e. 錯誤字段說明 rediscontext.err

1

//錯誤字段,會設定為以下其中乙個值

2#define redis_err_io 1 /* error in read or write */

3#define redis_err_eof 3 /* end of file */

4#define redis_err_protocol 4 /* protocol error */

5#define redis_err_oom 5 /* out of memory */

6#define redis_err_other 2 /* everything else... */

2. 非同步api

待補充

3. 同步api示例(實現訂閱功能)

1 #include 2 #include 3 #include "

hiredis.h"4

5void processreply( redisreply *preply )614

}1516int main( int argc, char

const *argv )

1725

26char * pkey = "

databus:req";

2728 redisreply * preply = rediscommand( pcontext, "

subscribe %s

", pkey );

29freereplyobject( preply );

30while ( redisgetreply( pcontext, (void **)&preply ) ==redis_ok )

3135

36redisfree( pcontext );

3738

return0;

39 }

Hiredis 基本使用

0.前言 hiredis是乙個redis的c客戶端庫函式,基本實現了redis的協議的最小集。這裡對hiredis的api作基本的介紹以及應用,主要參考hiredis的readme檔案以及相關原始碼。1.同步api rediscontext,該庫的上下文環境。1 context for a conn...

hiredis使用簡介

hiredis是redis資料庫的c介面,目前只能在linux下使用,幾個基本的函式就可以操作redis資料庫了。一 api簡介 1 rediscontext redisconnect const char ip,int port 類似的提供了乙個函式rediscontext redisconnec...

使用hiredis報錯LNK2005

專案的db中使用了redis python mysql的儲存方案,在編譯redis庫的時候,win32 interop.lib與專案中原有的net.lib有編譯衝突,net.lib引用了ws2 32.lib,導致tcp的幾個介面bind accept 報重複定義的錯誤。解決方案 修改了redis的原...