hiredis使用簡介

2021-07-31 03:38:29 字數 4411 閱讀 5754

hiredis是redis資料庫的c介面,目前只能在linux下使用,幾個基本的函式就可以操作redis資料庫了。

一、api簡介

1、rediscontext* redisconnect(const char *ip, int port);

類似的提供了乙個函式rediscontext* redisconnectwithtimeout(const char *ip, int port, timeval tv)

redisconnect函式用來建立乙個叫rediscontext的東西,它包含了連線相關的資訊。它裡面有個err欄位,0表示正常,其他表示出錯了!通過errstr欄位可以知曉錯誤資訊。

// 建立連線

rediscontext *c = redisconnect("127.0.0.1", 6379);

if (c !=

null

&& c->err)

2、void *rediscommand(rediscontext *c, const char *format, …);

說明:該函式執行redis資料庫中的操作命令,第乙個引數為連線資料庫時返回的rediscontext,剩下的引數為變參,就如c標準函式printf函式一樣的變參。

返回值為void*,一般強制轉換成為redisreply型別,以便做進行進一步的處理。

rediscommand的呼叫格式類似printf函式,上面的第二條呼叫語句的作用在於輸入二進位制格式的value內容,其後必須表明二進位制的位元組長度!

// 執行命令

reply = rediscommand(context, "set

keyvalue

");reply = rediscommand(context, "

setkey %s", value);

reply = rediscommand(context, "

setkey %b", value, (size_t) valuelen);

reply = rediscommand(context, "

setkey:%s %s", myid, value);

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物件的指標

3、void *rediscommandargv(rediscontext *c, int argc, const char **argv, const size_t *argvlen);

說明:乙個類似rediscommand的函式,批量執行命令
4、void freereplyobject(void *reply);

說明:釋放rediscommand執行後返回的redisreply所占用的記憶體
5、void redisfree(rediscontext *c);

說明:斷開redisconnect()所產生的連線,並釋放rediscontext的內容
二、使用步驟

1、rediscommand的函式執行流程說明:

a. 格式化redis command

b. 格式化後的命令內容放入rediscontext的輸出緩衝區

c. 呼叫redisgetreply函式執行命令,得到結果

// 例子

redisreply *reply = null;

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

freereplyobject(reply);

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

freereplyobject(reply);

// 訂閱模式

reply = rediscommand(context,"subscribe test");

freereplyobject(reply);

while(redisgetreply(context,&reply) == redis_ok)

3、redisreply返回結果處理:

redis_ok 正常

redis_err_io   io讀/寫出現異常,通過errno檢視原因

redis_err_eof 伺服器關閉了鏈結,讀結束

redis_err_protocol 分析redis協議內容出錯

edis_err_other 其他未知的錯誤

上述錯誤型別都可以通過redisreply的errstr欄位檢視簡短的描述

三、非同步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(

redisasynccontext *ac, rediscallbackfn *fn, void *privdata,

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

獲取命令輸出和同步api相同

4、關閉連線

void redisasyncdisconnect(redisasynccontext *ac);

四、輔助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);

// 例子

#include

#include

#include

#include

#include

#include

#include

void dotest()

printf("connect to redisserver success\n");

const

char* command1 = "set stest1 value1";

redisreply* reply = (redisreply*)rediscommand(c, command1); // 執行命令,結果強轉成redisreply*型別

if( null == reply)

if( !(reply->type == redis_reply_status && strcasecmp(reply->str,"ok")==0))

freereplyobject(reply);

printf("succeed to execute command[%s]\n", command1);

// 一切正常,則對返回值進行處理

} int main()

redis命令簡介和hiredis的使用

客戶端第二次訪問資料庫時,直接從redis讀出 客戶端 key string value string 設定乙個鍵值對 string string set key value 通過key得到value get key 同時設定乙個或多個 key value 對 mset key value key ...

Hiredis 基本使用

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

Hiredis 基本使用

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