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/*23同步執行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 structredisreply 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的原...